将 UINavigationBar 附加到 UIScrollView 以获得缩小的标题

Posted

技术标签:

【中文标题】将 UINavigationBar 附加到 UIScrollView 以获得缩小的标题【英文标题】:Attach UINavigationBar to UIScrollView to get shrinking title 【发布时间】:2018-09-26 08:16:33 【问题描述】:

我有一个 UIViewController,里面有一个 UITableView。我需要在 UIViewController 中而不是在 UINavigationController 中来支持应用程序设计中的一些其他功能。在 ios 11 及更高版本中,Apple 为 UINavigationBars 引入了大标题效果,当用户向下滚动时会缩小。如何在不使用 UITableViewController 的情况下实现此行为?

【问题讨论】:

你到底想要什么?可以的话可以上传图片吗? 在您的 iOS 设备上,打开设置应用并向下滚动。注意滚动时导航栏是如何缩小的。这可以通过以 UITableViewController 作为其根的 UINavigationController 来实现。如何使用 UINavigationController 和带有滚动视图/表格视图的 UIViewController 来做到这一点? 【参考方案1】:

您可以只放置一个 UITableView/ 滚动视图,并将相对于 superview 的底部和顶部约束设置为 0。

当呈现此页面时,将其作为 rootViewController 放入 let rootVc = UINavigationController(rootViewController: 'your view controller') 也启用 rootVC.preferredLargeTitle = true

因此,如果您的 tableView 有更多单元格,并且当您滚动导航栏时,导航栏会自行缩小。

【讨论】:

我无法让它工作 - 我已经按照新 iOS 应用程序中的建议设置了我的约束,虽然内容从导航栏下方开始,但导航栏不会“折叠” 如果可以的话,是否会在某个时候与示例代码共享一个 git 链接? 感谢您的帮助。我让它根据您的示例项目工作。如果在滚动视图下方添加视图,您是否知道是否有任何方法可以保持这种行为?如果发生这种情况,它将停止工作。 我认为在 scrollViewDidScroll 中我们可以检测是否发生滚动,然后我们切换 navBar 首选标题属性,但我没有尝试过,我今天会尝试并更新我的代码。 它无需编写额外的代码行就可以工作了,你可以查看我相同的 git repo 以获取示例

以上是关于将 UINavigationBar 附加到 UIScrollView 以获得缩小的标题的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 UINavigationBar 中绘图,附加到顶部

带有 UINavigationController 的独立 UINavigationBar 中的后退按钮

将按钮添加到 UINavigationBar 的子类

将 subView 添加到 UINavigationBar 并将其删除

将 UIImageView 全局添加到 UINavigationBar 而不是标题

将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController