我已经在示例项目中使用Xcode 11(iOS 13)在情节提要中定义了2个视图控制器对示例项目进行了测试。 “演示”视图控制器嵌入在导航控制器中,并在viewWillAppear
中设置了导航栏颜色。“搜索”视图控制器在UISearchController
中添加一个viewDidLoad
,并由当前视图控制器推动(NOT模态)。
仅使用此设置,当显示搜索视图控制器时,导航栏具有预期的蓝色背景和红色。但是,当向下滚动并显示搜索栏时,导航栏的背景颜色会丢失(或更改为默认的iOS灰色/半透明外观)。但是,如果您向上滚动(隐藏搜索栏)或专注于搜索栏文本字段,则导航栏颜色会返回!
此外,如果您专注于搜索栏文本字段,然后取消(通过单击“取消”按钮,则导航栏的色泽会从红色恢复为默认的iOS蓝色,这可以通过后退栏项注意到。
是否有解决此问题的建议?
我也已在搜索控制器的viewWillAppear
中设置了导航栏颜色,但这并没有改变此行为。
我在搜索控制器中将导航栏的isTranslucent
设置为true
,这似乎阻止了背景颜色的还原,但是在取消时它并没有改变色调的还原。
Presenting View Controller
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.barTintColor = .blue
navigationController?.navigationBar.tintColor = .red
}
搜索视图控制器
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Search VC"
searchController.dimsBackgroundDuringPresentation = false
searchController.obscuresBackgroundDuringPresentation = false
navigationItem.searchController = searchController
definesPresentationContext = true
}
但是,当向下滚动并显示搜索栏时,导航栏的背景颜色会丢失
所有这些都是正常的。 iOS 13中的新增功能,扩展后的导航栏(显示搜索栏,大标题等)与普通导航栏的外观不同。您的设置仅适用于普通导航栏,因为您没有将它们设置为iOS 13方式。如果要使扩展的导航栏看起来像普通导航栏,则必须分别且明确地设置其外观。
为此,您需要设置导航栏的scrollEdgeAppearance
。研究类UIBarAppearance,UINavigationBarAppearance和UIBarButtonItemAppearance(您需要显式设置backButtonAppearance
)。