顶部安全区约束动画
Top Safe Area Constraint Animation
设置
一个简单的视图控制器,在导航项中设置了 UISearchController,以使用 iOS 11 在搜索栏中的搜索功能。
顶部限制为 SafeArea.Top
的任何视图
问题
当呈现搜索控制器时,导航栏会因为它的大小变化而产生动画,但顶部区域的约束不跟随动画。
如果有人知道我能做什么(现在我想我唯一的选择是禁用 hidesNavigationBarDuringPresentation
来完全避免动画)
请参阅下面的示例,其中我激活了慢速动画以便于理解:
您可以使用 UIView.animate 对约束变化进行动画处理。由于您的约束基于视图的安全区域,因此 viewSafeAreaInsetsDidChange
方法可以提醒您约束值的变化:
override func viewSafeAreaInsetsDidChange() {
UIView.animate(withDuration: 1) {
self.view.layoutIfNeeded()
}
}
我在 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.
设置
一个简单的视图控制器,在导航项中设置了 UISearchController,以使用 iOS 11 在搜索栏中的搜索功能。
顶部限制为
SafeArea.Top
的任何视图
问题
当呈现搜索控制器时,导航栏会因为它的大小变化而产生动画,但顶部区域的约束不跟随动画。
如果有人知道我能做什么(现在我想我唯一的选择是禁用 hidesNavigationBarDuringPresentation
来完全避免动画)
请参阅下面的示例,其中我激活了慢速动画以便于理解:
您可以使用 UIView.animate 对约束变化进行动画处理。由于您的约束基于视图的安全区域,因此 viewSafeAreaInsetsDidChange
方法可以提醒您约束值的变化:
override func viewSafeAreaInsetsDidChange() {
UIView.animate(withDuration: 1) {
self.view.layoutIfNeeded()
}
}
我在 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.