当我从UINavigationController向UINavigationItem添加UISearchController时;当视图加载时,该图标变为白色;当用户单击搜索栏时,该图标变为指定的颜色。自iOS 13.1起发生这种情况。该视频显示了该行为:
我的代码包含一个简单的情节提要,其中包含一个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)
这似乎是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运行时魔术来配置导航栏。
| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |