我正在寻找一种解决方案,能够在嵌入使用大标题的导航 Controller 内的 View Controller 中托管多个 ScrollView / TableView 。
这个想法是有一个带有两个/三个段的分段控件,它将显示/隐藏表格 View 和/或其他 ScrollView 。
我的问题是,为了使大标题正常工作(即,当 TableView / ScrollView 向上和向下滚动时展开/折叠),它期望第一个 View 是正在滚动的 TableView / ScrollView 。这对于我的初始表格 View 效果很好,但是一旦我导航(通过简单地隐藏/显示另一个表格 View 来完成)到第二个/第三个表格 View ,它就会停止工作(因为后续表格 View 不是 View 层次结构中的第一个)。这是一个例子:
从上面的屏幕截图可以看出,我创建了两个由分段控件控制的 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 时,它的初始状态是折叠的而不是展开的:
如果我尝试向上和向下滚动,问题会立即自行解决,但我宁愿让它第一次工作。这是我的 ViewController 代码:
基本上,我已经为此苦苦挣扎了一段时间,而且我没有主意......理想情况下,我想要一个干净的解决方案(即打开和关闭更喜欢LargeTitles以使这项工作看起来非常hacky!)但也使当前的解决方案工作也可以:-)
我已经考虑过其他解决方案,例如拥有一个顶部 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/