我正在寻找一个解决方案,能够在一个视图控制器中托管多个滚动视图/表格视图,该视图控制器嵌入在一个使用大标题的导航控制器中。
这个想法是有一个分段控件,有两个/三个分段,将显示/隐藏表格视图和/或其他滚动视图。
我的问题是为了大标题的工作(即,在tableview/scrollview向上和向下滚动时展开/折叠)它期望第一个视图是正在滚动的tableview/scrollview。这对于我的初始tableview工作得很好,但是一旦我导航(这通过简单地隐藏/显示另一个表视图来完成)到第二/第三,它停止工作(因为后续的表视图不是视图层次结构中的第一个)。
从上面的截图中可以看出,我创建了两个由分段控件控制的滚动视图。如果我简单地显示/隐藏它们,第二个滚动视图上将不会有大的标题折叠,就像上面提到的,UINavigationController总是希望可滚动视图是视图层次结构中的第一个,以便工作。
为了更接近我所需要的,我还发送了即将显示的子视图'回':
self.view.sendSubviewToBack(secondScrollView)
不幸的是,这一点并不奏效,因为尽管新的滚动视图是视图层次结构中的第一个项目,但UINavigationController仍然记得"旧“层次结构。我已经设法”欺骗“UINavigationController刷新并识别新的层次结构,代码如下:
self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.prefersLargeTitles = true
这似乎最终使大标题在需要时可以收缩和展开,然而,引入了一个新问题。当导航到第二个滚动视图时,它的初始状态是折叠的,而不是展开的:
如果我尝试上下滚动,问题会立即自行修复,但我宁愿让它第一次工作。以下是我的ViewController代码:
基本上我已经挣扎了一段时间,我的想法了...理想情况下,我想一个干净的解决方案(即打开和关闭prefersLargeTitles,使这项工作似乎非常hacky!),但也使目前的解决方案工作也将做:-)
我也考虑过其他解决方案,比如有一个顶部的UIScrollView和从内部切换内容(即添加/删除视图或显示/隐藏/甚至嵌入一个容器视图),但是,由于我也需要处理表格,我不认为在滚动视图中嵌入表格是一个好主意(因为表格本身有一个滚动视图来显示它的内容)。
1条答案
按热度按时间hfyxw5xn1#
在打开/关闭largeTitle之后,需要调用
navigationBar.sizeToFit()
。