顶部安全区域约束动画

Posted

技术标签:

【中文标题】顶部安全区域约束动画【英文标题】:Top Safe Area Constraint Animation 【发布时间】:2018-08-15 14:13:00 【问题描述】:

设置

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

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

问题

当显示搜索控制器时,导航栏会因为它的大小变化而被动画化,但顶部区域的约束不会跟随动画。

如果有人知道我能做什么(现在我想我唯一的选择是禁用 hidesNavigationBarDuringPresentation 以完全避免动画)

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

【问题讨论】:

【参考方案1】:

您可以使用 UIView.animate 为约束更改设置动画。由于您的约束基于视图的安全区域,viewSafeAreaInsetsDidChange 方法可以提醒您约束值的变化:

override func viewSafeAreaInsetsDidChange() 
    UIView.animate(withDuration: 1) 
        self.view.layoutIfNeeded()
    

【讨论】:

谢谢你,先生,你成就了我的一天 值得注意的是,在这种情况下,持续时间似乎没有被考虑在内,似乎正在使用演示动画的持续时间【参考方案2】:

我在 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 中。

【讨论】:

以上是关于顶部安全区域约束动画的主要内容,如果未能解决你的问题,请参考以下文章

获取顶部约束的参考

动画 UITableView 的自动布局顶部约束导致崩溃,有啥线索吗?

添加约束时缺少自动布局“安全区域”

如何为具有约束的 UIView 设置动画?

顶部栏在不安全区域重叠

带约束的 UIImageView 的 iOS 动画