导航栏大标题转换委托

Posted

技术标签:

【中文标题】导航栏大标题转换委托【英文标题】:Navigation Bar Large Title transition delegate 【发布时间】:2019-05-24 07:56:48 【问题描述】:

我在导航栏中启用了Large Title 自动Display Mode,因此当用户滚动时它会缩小。有没有办法在这种转变发生时得到通知?我没有找到任何委托方法。我有一个带有长标签的Right Bar Button Item,当大标题缩小时我想隐藏它,以便标题完全居中。

【问题讨论】:

【参考方案1】:

显然,没有任何代表或任何其他官方方式可以获悉此事。所以我的解决方法是使用ScrollViewDelegate:

extension ViewController: UIScrollViewDelegate 
    func scrollViewDidScroll(_ scrollView: UIScrollView) 
        if let height = navigationController?.navigationBar.frame.size.height, height == 44 
            // handle small title
        
        else 
            // handle large title
        
    

这在 iPad 上不起作用,因为导航栏的高度不同,但这是我的情况。

另外请记住,scrollViewDidScroll 在单个小滚动中被调用 XX 次,因此在进行任何更新之前,请检查它们是否已经完成。

【讨论】:

您可以在viewDidLayoutSubviews 中检查相同的内容。它的调用频率比scrollViewDidScroll 少一点。 有没有更好的方法不硬编码 44?

以上是关于导航栏大标题转换委托的主要内容,如果未能解决你的问题,请参考以下文章

带有导航栏大标题的 UITableView 奇怪的滚动行为,顶部的弹跳效果在滚动到顶部时自动切断/生涩

UINavigationController 在 iOS7 中使用自定义转换委托隐藏导航栏

粘性导航栏可变大小更改滚动位置

appDelegate 中的委托功能不会更改导航栏颜色

无法将 UISearchController 搜索栏添加到导航栏中,并且未调用委托方法

使用默认导航栏文本