iOS中的静态/固定导航栏

Ego*_*kov 4 uinavigationcontroller ios swift

我的应用程序内部有一个导航控制器和一个集合视图。有一个问题:我在导航栏中使用大标题,因此里面的所有内容都不是静态的。当我滚动集合视图单元格时,标题(我手动创建了该标题,并使用UILabel()它在导航栏中随意移动它)和按钮向上移动,导航栏采用iOS 10导航栏的形式,即其高度。你可以在这里看到它:

我的导航栏带有“首选大标题”的正常状态开:

当我滚动“收藏夹视图”时,一切都会发生:

所以问题很简单:如何使导航条的力保持恒定的高度?我希望它即使在滚动时也能固定。有什么想法吗?可能吗?

第二个问题,如果第一个是不可能的:我的问题的另一种解决方案是使“优先选择大标题”的导航栏更大。我尝试了这段代码:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let height: CGFloat = 50 //whatever height you want to add to the existing height
    let bounds = self.navigationController!.navigationBar.bounds
    self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + height)
}
Run Code Online (Sandbox Code Playgroud)

但它仅适用于大标题。那么如何使导航栏更大?

Kam*_*ran 6

是的,您可以将其修复。如果视图层次结构中的第一个视图不是,则不会滚动CollectionView/TableView (ScrollView)

使用情节提要/ Xib:

考虑下面的图像,其中在tableViewbutton中添加了和scene。此处的navigation bar滚动会折叠,tableView因为的层次结构tableViewviewController的第一个视图是containerView附加到导航栏的。

在此处输入图片说明

现在,让导航栏固定的,如果我们只是改变的顺序tableViewbutton下面,将禁用的崩溃navigation bar

在此处输入图片说明

要更改的顺序view,您必须单击,按住并向上/向下移动。

如果只有CollectionView此场景,则可以view在顶部添加一个占位符,并将其height设置zero为如下所示,

在此处输入图片说明

以编程方式:

如果要以编程方式设置视图,则只需要在顶部添加一个占位符视图,或者tableView/collection在添加其他视图之后添加即可。

例如,

self.view.addSubview(UIView(frame: .zero))
self.view.addSubview(tableView) // or collectionView
Run Code Online (Sandbox Code Playgroud)