ios - UINavigationController 大标题和多个 UIScrollViews/UITableViews

标签 ios swift uiviewcontroller uiscrollview uisegmentedcontrol

我正在寻找一种解决方案,能够在嵌入使用大标题的导航 Controller 内的 View Controller 中托管多个 ScrollView / TableView 。

这个想法是有一个带有两个/三个段的分段控件,它将显示/隐藏表格 View 和/或其他 ScrollView 。

我的问题是,为了使大标题正常工作(即,当 TableView / ScrollView 向上和向下滚动时展开/折叠),它期望第一个 View 是正在滚动的 TableView / ScrollView 。这对于我的初始表格 View 效果很好,但是一旦我导航(通过简单地隐藏/显示另一个表格 View 来完成)到第二个/第三个表格 View ,它就会停止工作(因为后续表格 View 不是 View 层次结构中的第一个)。这是一个例子:

Storyboard Example

从上面的屏幕截图可以看出,我创建了两个由分段控件控制的 ScrollView 。如果我只是显示/隐藏它们,第二个 ScrollView 上不会有大的标题折叠,就像上面提到的那样,UINavigationController 总是期望可 ScrollView 成为 View 层次结构中的第一个 View 才能工作。

为了更接近我的需要,我还发送了即将“返回”显示的 subview :

self.view.sendSubviewToBack(secondScrollView)

不幸的是,这一点并没有起作用,因为看起来虽然新的 ScrollView 是 View 层次结构中的第一项,但 UINavigationController 仍然记得“旧”层次结构。我已经成功地“欺骗” UINavigationController 使用以下代码刷新并识别新的层次结构:

self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.prefersLargeTitles = true

这似乎最终使大标题可以在需要时缩小和扩展,但是,一个新问题又出现了。当导航到第二个 ScrollView 时,它的初始状态是折叠的而不是展开的:

Collapsed second scrollview

如果我尝试向上和向下滚动,问题会立即自行解决,但我宁愿让它第一次工作。这是我的 ViewController 代码:

view controller code

基本上,我已经为此苦苦挣扎了一段时间,而且我没有主意......理想情况下,我想要一个干净的解决方案(即打开和关闭更喜欢LargeTitles以使这项工作看起来非常h​​acky!)但也使当前的解决方案工作也可以:-)

我已经考虑过其他解决方案,例如拥有一个顶部 UIScrollView 并从内部切换内容(即添加/删除 View 或显示/隐藏/甚至嵌入容器 View ),但是,因为我也需要使用表格,我认为在 ScrollView 中嵌入表格不是一个好主意(因为表格本身有一个用于其内容的 ScrollView )。

最佳答案

在打开/关闭 largeTitle 后,您需要调用 navigationBar.sizeToFit()

navigationController?.navigationBar.prefersLargeTitles = false
navigationController?.navigationBar.prefersLargeTitles = true
navigationController?.navigationBar.sizeToFit()

关于ios - UINavigationController 大标题和多个 UIScrollViews/UITableViews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59440196/

相关文章:

objective-c - 究竟是什么将MoveToParentViewController : and didMoveToParentViewController: do?

swift - Tabbar 在 segue 之后不显示?

ios - ios/mac 开发者的 iCloud 替代品

ios - 栏按钮项目未显示

ios - 从 Parse 检索应用程序中已有的联系人时遇到问题

ios - 使用RxSwift Observables进行递归调用

ios - 如何在多个容器 View 中快速重用相同的 View Controller ?

ios - 如何在ios中异步下载图片?

iphone - 为什么我会在这个简单的代码上收到 Bad Access 异常?

swift - 如何在 Swift Perfect 框架中锁定/解锁变量