iOS 13 Changes to UISearchBar tint's, can't achieve the same outcome

旧街凉风 提交于 2019-12-23 22:16:38

问题


I've been experimenting all day and trying to figure out just how to get my UISearchBar to appear the same in iOS13 as it appears in iOS12/11

So the way the search bar is added is simply a new 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;

The results on iOS 11/12:

The results on iOS 13:

On iOS 13 I am using the new UINavigationBarAppearance code like this:

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

                NavigationItem.StandardAppearance = appearance;

On iOS 11/12 I am using legacy way to achieve it:

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

I've tried a number of things, but can't seem to get the UISearchBar to tint by itself how iOS11/12 achieves it.

I know that the new UISearchBar now has access to the UITextField and I can configure the background color's etc.


回答1:


There were several properties added in iOS 13, so you need to use them with the help of a conditional. For changing the background color, you have to use the BackgroundColor property of the SearchBar, like this

searchController.SearchBar.BackgroundColor = UIColor.Red;



回答2:


On iOS 13, you have access to the internal UISearchTextField through the SearchTextField property, you can set it's background directly (in my case, I need the background to be white). Be sure to check the iOS version to avoid exceptions.

if(UIDevice.CurrentDevice.CheckSystemVersion(13,0))
{
    searchController.SearchBar.SearchTextField.BackgroundColor = UIColor.White;
}



回答3:


Use a custom renderer and override the OnElementChanged method this way

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();
  }
}

later on, you don't have to do anything else and worked for me on ios 12 and ios 13+



来源:https://stackoverflow.com/questions/58229829/ios-13-changes-to-uisearchbar-tints-cant-achieve-the-same-outcome

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!