向其中添加UISearchController时导航栏变为白色

Dev*_*xln 6 ios swift ios13

当我从UINavigationController向UINavigationItem添加UISearchController时;当视图加载时,该图标变为白色;当用户单击搜索栏时,该图标变为指定的颜色。自iOS 13.1起发生这种情况。该视频显示了该行为:

https://imgur.com/wn5zbnJ

我的代码包含一个简单的情节提要,其中包含一个NavigationController +一个TableViewController,并且NavigationController为其分配了一种颜色: 在此处输入图片说明

ViewController由以下代码组成:

class ViewController: UITableViewController {

    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        searchController.hidesNavigationBarDuringPresentation = false
        searchController.obscuresBackgroundDuringPresentation = false
        navigationItem.searchController = searchController
    }
}
Run Code Online (Sandbox Code Playgroud)

我还将这些键添加到info.plist文件中,以强制应用程序进入灯光模式,但是如果删除这些键,则仍然存在相同的行为:

<key>UIUserInterfaceStyle</key>
<string>Light</string>
Run Code Online (Sandbox Code Playgroud)

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

Lob*_*obo 12

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

let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .systemRed
appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
navigationItem.standardAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance
Run Code Online (Sandbox Code Playgroud)

您可能还需要设置searchField backgroundColor:

let searchField = searchController.searchBar.searchTextField
searchField.backgroundColor = .systemBackground
Run Code Online (Sandbox Code Playgroud)


Sco*_*ten 6

这似乎是iOS 13.1中的错误。具体来说,导航栏有一个新的iOS 13特定外观(UINavigationBarAppearance),用于指定滚动视图滚动到顶部时的外观以及默认状态。通常,仅当使用相应的SDK(iOS 13.1)构建应用程序时,此类更改才会生效。但是,使用iOS 12 SDK构建应用程序时,似乎也会出现该行为。

请参阅:https//developer.apple.com/documentation/uikit/uinavigationbarappearance

更新:这里有一个解决方法:https : //itnext.io/fixing-issues-caused-by-future-sdks-ae0896384abf

本质上,如果您的应用程序在运行iOS 13的设备上运行,则可以通过NSClassFromString()快速创建新类的实例,然后使用一些Objective-C运行时魔术来配置导航栏。

  • 开发人员报告此问题已在 iOS 13.2 中得到解决。 (2认同)