在iOS 11中,如果启用prefersLargeTitles,系统应用程序会在您向下滚动时压缩导航栏:
我无法弄清楚如何在我自己的应用程序中实现这一点,默认情况下栏保持不变:
我唯一能看到的就是隐藏条形滑动,但它会隐藏整个条形而不是压缩它:
这只是一个在Xcode 9 beta中创建的空项目,并添加了新的故事板。
我需要做些什么才能获得与系统应用相同的行为?
答案 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