最佳安全区域约束动画

时间:2018-08-15 14:13:01

标签: ios11 uinavigationitem uisearchcontroller

设置

  1. 一个简单的视图控制器,在导航项中设置了UISearchController,可以在搜索栏中使用iOS 11的搜索功能。

  2. 任何视图的顶部都被限制为SafeArea.Top

问题

在显示搜索控制器时,导航栏会因为其大小变化而被设置为动画,但是对顶部区域的约束并不跟随动画。

如果有人对我可以做的事情有想法(现在我想我唯一的选择就是禁用hidesNavigationBarDuringPresentation来避免动画)

请参见下面的示例,其中我激活了慢速动画以方便理解:

enter image description here

2 个答案:

答案 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。