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

问题描述 投票:4回答:4

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

enter image description here

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

enter image description here

我唯一能看到的就是Hide Bars On Swipe,但它会隐藏整个条而不是压缩它:

enter image description here

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

为了获得与系统应用程序相同的行为,我需要做什么?

cocoa-touch uinavigationcontroller uikit uinavigationbar ios11
4个回答
8
投票

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

因此,在故事板的导航栏中,首选大标题不受控制。

在您的视图控制器中:

self.navigationController?.navigationBar.prefersLargeTitles = true


2
投票

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

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

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

希望这有助于某人。


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.