Ios 当添加UISearchController时,导航栏将变为白色

Ios 当添加UISearchController时,导航栏将变为白色,ios,swift,ios13,Ios,Swift,Ios13,当我从UINavigationController向UINavigationItem添加UISearchController时;当视图加载并更改为用户单击搜索栏时指定的颜色时,它将变为白色。这发生在ios 13.1之后。此视频显示了以下行为: 我的代码由带有NavigationController+TableViewController的简单故事板组成,NavigationController具有指定的颜色: ViewController由以下代码组成: 类ViewController:UI

当我从UINavigationController向UINavigationItem添加UISearchController时;当视图加载并更改为用户单击搜索栏时指定的颜色时,它将变为白色。这发生在ios 13.1之后。此视频显示了以下行为:

我的代码由带有NavigationController+TableViewController的简单故事板组成,NavigationController具有指定的颜色:

ViewController由以下代码组成:

类ViewController:UITableViewController{
设searchController=UISearchController(searchResultsController:nil)
重写func viewDidLoad(){
super.viewDidLoad()
searchController.hidesNavigationBarDuringPresentation=false
searchController.obscuresBackgroundDuringPresentation=false
navigationItem.searchController=searchController
}
}
我还将这些键添加到
info.plist
文件中,以强制应用程序进入灯光模式,但如果我删除这些键,同样的行为仍然存在:

<key>UIUserInterfaceStyle</key>
<string>Light</string>
UIUserInterfaceStyle
轻的

这是在运行iOS 13.1 beta 1的iPhone XS Max上测试的。这是预期的行为还是需要修复的错误?

您的问题中不清楚您想要什么。但是,如果您愿意,可以将搜索栏添加到navigationBar中,并使用特定的颜色,这可能会对您有所帮助

将seachbar放入导航栏的过程:

let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
您可以将任何需要的控制器添加到“searchResultsController”值中

如果要将背景色设置为特定颜色,可以从Storyborad->navigationbar->navigation bar Attribute inspection更改条形图的色调

此外,以下AppDelegate.swift文件的代码也将执行相同的操作。”对“tintcolor”和“titletextcolor”进行了注释

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        let navigationBarAppearace = UINavigationBar.appearance()
        navigationBarAppearace.barTintColor = UIColor.blue

        // navigationBarAppearace.tintColor = UIColor.red
        //navigationBarAppearace.titleTextAttributes = [.foregroundColor: UIColor.red]
        return true
    }

我也遇到了同样的问题,并且已经打开了苹果的雷达。 即使如此,如果将backgroundColor设置为UINavigationBar的外观,则在下拉并显示搜索栏时,导航栏将变为该颜色,而不是透明,但状态栏仍保持白色

UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().barTintColor = .blue
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
UINavigationBar.appearance().backgroundColor = .red

下面是一些试图缓解这种行为的代码,但我很乐意听到关于状态栏的事情

这似乎是iOS 13.1中的一个bug。具体来说,导航栏有一个新的iOS 13特定外观(UINavigationBarAppearance),指定滚动视图滚动到顶部时的外观以及默认状态。通常,这样的更改只有在应用程序使用相应的SDK(iOS 13.1)构建时才会生效。然而,似乎存在一个bug,当使用iOS 12 SDK构建应用程序时,该行为也会发生

见:

更新: 这里有一个解决方法:


基本上,如果您的应用程序运行在运行iOS 13的设备上,则可以通过swift中的NSClassFromString()创建新类的实例,然后使用objective-c运行时魔术来配置导航栏

看起来需要在iOS 13上使用新的UINavigationBarAppearance。尝试将其添加到viewDidLoad:

let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .systemRed
appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
navigationItem.standardAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance
您可能还需要设置searchField backgroundColor:

let searchField = searchController.searchBar.searchTextField
searchField.backgroundColor = .systemBackground

您是否希望导航栏始终为红色,是否希望在导航栏中搜索?@YunusKarakaya是的,我希望导航栏始终为红色;还有导航栏中的搜索栏。不幸的是,我在iOS 13上也有同样的行为。1@Devxln你修好了吗?我也有同样的问题。嗨,对不起,这也不是我问题的答案;这与ios 13有关。自ios 13以来,出现了我所描述的行为。即使我在AppDelegate中添加了这些全局颜色值。我在帖子中补充说,这个问题是从ios 13.1开始出现的。@Devxln我下载了beta 13.1,但我没有遇到意外的行为。好的,没有办法进行临时修复吗?不。我们不能根据使用的SDK使UIKit表现不同。解决方法是更改导航栏的内部背景视图,但这取决于导航栏视图层次结构的特定结构,这是一个实现细节,可能随时更改。开发人员报告此问题已在iOS 13.2中解决。