Ios UINavigationController大标题和多个UIScrollView/UITableView

Ios UINavigationController大标题和多个UIScrollView/UITableView,ios,swift,uiviewcontroller,uiscrollview,uisegmentedcontrol,Ios,Swift,Uiviewcontroller,Uiscrollview,Uisegmentedcontrol,我正在寻找一种解决方案,能够在一个嵌入在使用大标题的导航控制器中的viewcontroller中托管多个ScrollView/TableView 这个想法是要有一个分段控件,其中包含两个/三个分段,用于显示/隐藏表格视图和/或其他滚动视图 我的问题是,为了使大标题正常工作(即,在上下滚动tableview/scrollview时展开/折叠),它希望第一个视图是正在滚动的tableview/scrollview。这对我的初始tableview很有效,但一旦我导航到第二个/第三个tableview(

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

这个想法是要有一个分段控件,其中包含两个/三个分段,用于显示/隐藏表格视图和/或其他滚动视图

我的问题是,为了使大标题正常工作(即,在上下滚动tableview/scrollview时展开/折叠),它希望第一个视图是正在滚动的tableview/scrollview。这对我的初始tableview很有效,但一旦我导航到第二个/第三个tableview(通过简单地隐藏/显示另一个tableview完成),它就会停止工作(因为后续的tableview不是视图层次结构中的第一个)。这里有一个例子:

从上面的屏幕截图可以看出,我创建了两个由分段控件控制的滚动视图。如果我只是显示/隐藏它们,第二个scrollview上就不会出现大标题折叠,正如上面提到的,UINavigationController总是希望可滚动视图是视图层次结构中的第一个视图,这样才能工作

为了更接近我需要的内容,我还发送了将要显示的子视图“back”:

self.view.sendSubviewToBack(secondScrollView)
不幸的是,这一点本身并没有起作用,因为尽管新的scrollview是视图层次结构中的第一项,但UINavigationController仍然记得“旧”层次结构。我已成功“欺骗”UINavigationController,用以下代码刷新并识别新的层次结构:

self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.prefersLargeTitles = true
这似乎最终使大型标题在需要时缩小和扩展,然而,一个新的问题已经被引入。导航到第二个scrollview时,其初始状态为折叠而不是展开:

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

基本上,我已经挣扎了一段时间,我的想法。。。理想情况下,我希望有一个干净的解决方案(即打开和关闭PreferSlargetilles以使此工作看起来非常困难!),但也可以使当前解决方案工作:-)


我曾考虑过其他解决方案,如使用一个顶部UIScrollView和从内部切换内容(即添加/删除视图或显示/隐藏/甚至嵌入容器视图),但是,由于我也需要处理表,我认为在scrollview中嵌入表不是一个好主意(表本身的内容有一个scrollview)。

您尝试过将段控件放在容器视图中吗?Hi@DevKyle,这不太可能起作用。我的意思是,我可以在容器视图中切换视图,但UINavigationController需要scrollview(或表/集合视图)作为第一项,所以我仍然回到了我的第一期大标题。我可以将容器视图包装为滚动视图,但如果我需要在容器视图中托管一个表,这将不起作用。您是否尝试过将segment控件放在容器视图中?Hi@DevKyle,这不太可能起作用。我的意思是,我将能够切换视图在容器视图中,但由于UINavigationController希望将ScrollView(或Table/CollectionView)作为第一项,因此我仍然返回到我最初发行的大标题中。我可以将容器视图包装在滚动视图中,但如果我需要在容器视图中托管一个表,这将无法发挥作用。