iOS 13 Изменения в оттенках UISearchBar, не может достичь того же результата - PullRequest
1 голос
/ 04 октября 2019

Я экспериментировал весь день и пытался выяснить, как заставить мой UISearchBar отображаться в iOS13 так же, как в iOS12 / 11

Таким образом, способ добавления панели поиска простоновый UISearchController.

            var searchController = new UISearchController(searchResultsController: null);
            searchController.SearchBar.Placeholder = "Search";
            searchController.SearchResultsUpdater = this;
            searchController.HidesNavigationBarDuringPresentation = false;
            searchController.DimsBackgroundDuringPresentation = false;

            NavigationItem.SearchController = searchController;
            NavigationItem.HidesSearchBarWhenScrolling = false;

Результаты на iOS 11/12:

iOS11/iOS12

Результаты на iOS 13:

iOS13

В iOS 13 я использую новый код UINavigationBarAppearance, подобный следующему:

                var appearance = new UINavigationBarAppearance();
                appearance.ConfigureWithOpaqueBackground();
                appearance.BackgroundColor = ColorPalette.TintColor;
                appearance.TitleTextAttributes = new UIStringAttributes { ForegroundColor = UIColor.White };

                NavigationItem.StandardAppearance = appearance;

В iOS 11/12 я использую устаревший способ достижения этого:

                NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
                NavigationController.NavigationBar.TintColor = UIColor.White;
                NavigationController.NavigationBar.BarTintColor = ColorPalette.TintColor;
                NavigationController.NavigationBar.Translucent = false;

Я пробовал несколько вещей, но не могу заставить UISearchBar подкрашивать сам, как это делает iOS11 / 12.

Я знаю, что новый UISearchBar теперь имеет доступ к UITextField иЯ могу настроить цвет фона и т. Д.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Используйте пользовательский рендерер и переопределите метод OnElementChanged таким образом

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
  base.OnElementChanged(e);
  if (Control != null)
  {
    if(UIDevice.CurrentDevice.CheckSystemVersion(13,0))
      Control.SearchTextField.BackgroundColor = Element.BackgroundColor.ToUIColor();
  }
}

позже вам не нужно больше ничего делать, и вы работали для меня на ios 12 и ios 13 +

0 голосов
/ 09 октября 2019

В iOS 13 добавлено несколько свойств, поэтому вам нужно использовать их с помощью условных выражений. Для изменения цвета фона вы должны использовать BackgroundColor свойство SearchBar, например,

searchController.SearchBar.BackgroundColor = UIColor.Red;
...