设置
一个简单的视图控制器,在导航项中设置了UISearchController,可以在搜索栏中使用iOS 11的搜索功能。
任何视图的顶部都被限制为SafeArea.Top
问题
在显示搜索控制器时,导航栏会因为其大小变化而被设置为动画,但是对顶部区域的约束并不跟随动画。
如果有人对我可以做的事情有想法(现在我想我唯一的选择就是禁用hidesNavigationBarDuringPresentation
来避免动画)
请参见下面的示例,其中我激活了慢速动画以方便理解:
答案 0 :(得分:2)
您可以使用UIView.animate为约束更改设置动画。由于您的约束基于视图的安全区域,因此viewSafeAreaInsetsDidChange
方法可以提醒您约束值的变化:
override func viewSafeAreaInsetsDidChange() {
UIView.animate(withDuration: 1) {
self.view.layoutIfNeeded()
}
}
答案 1 :(得分:0)
我在iOS 13.3上遇到了同样的问题。 这段代码修复了它。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
navigationController?.view.backgroundColor = .white
navigationController?.navigationBar.isTranslucent = false
}
如果在viewDidLoad上禁用isTranslucent,则在视图出现时searchBar将被隐藏。 您还可以利用navigationItem.hideSearchBarWhenScrolling避免将代码放入viewDidAppear。