iOS导航栏更喜欢大标题滚动行为

时间:2017-09-07 17:15:48

标签: cocoa-touch uinavigationcontroller uikit uinavigationbar ios11

在iOS 11中,如果启用prefersLargeTitles,系统应用程序会在您向下滚动时压缩导航栏:

enter image description here

我无法弄清楚如何在我自己的应用程序中实现这一点,默认情况下栏保持不变:

enter image description here

我唯一能看到的就是隐藏条形滑动,但它会隐藏整个条形而不是压缩它:

enter image description here

这只是一个在Xcode 9 beta中创建的空项目,并添加了新的故事板。

我需要做些什么才能获得与系统应用相同的行为?

4 个答案:

答案 0 :(得分:6)

不要在Interface Builder / Storyboard中设置任何有关大标题的内容,仅在代码中设置。这对我有用。

因此,在故事板的导航栏中,不要选中大型标题。

在视图控制器中:

self.navigationController?.navigationBar.prefersLargeTitles = true

答案 1 :(得分:2)

似乎这个问题是由于不同的原因而发生在人们身上的。上述答案都没有帮助我,但这就是DID的工作原理......

我解构了我的应用程序以找到原因,这是故事板中的视图层次结构。看来UITableView视图是视图控制器中的第一个视图。我有一个UITableView,后面有两个UIImageView s,这就是造成这个问题的原因。删除UIImageView后,一切正常。

我的修复:我最终在代码中创建了UIView,将我的两个图片视图添加到其中,然后将UIView添加到UITableview.backgroundView

希望这有助于某人。

答案 2 :(得分:1)

如果您必须定位较旧的iOS版本,则还必须在可用性检查中包含该作业:

if #available(iOS 11, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
}

答案 3 :(得分:1)

if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationController?.navigationBar.topItem?.title = "Hello"
    navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    let attributes = [
        NSAttributedStringKey.foregroundColor : UIColor.red,
        ]

    navigationController?.navigationBar.largeTitleTextAttributes = attributes
} else {
    // Fallback on earlier versions
}

http://iosrevisited.blogspot.in/2017/09/navigation-bar-with-large-titles-and.html