在导航控制器顶部控制器之间滚动

Posted

技术标签:

【中文标题】在导航控制器顶部控制器之间滚动【英文标题】:Scroll between navigation controllers top controllers 【发布时间】:2014-02-13 17:12:55 【问题描述】:

我的应用有 3 个主导航控制器,每个控制器都有自己的导航堆栈。 我想在这 3 个视图(导航控制器的视图)之间启用滑动。 但是,如果用户在其中一个控制器中导航(推另一个视图控制器),我想禁用滚动到其他导航控制器,直到他返回根控制器。

到目前为止,这是我所做的: -我创建了一个容器控制器,它具有滚动视图作为子视图 -我创建了这 3 个导航控制器,将它们作为子视图添加到容器控制器中,并将它们的视图添加为滚动视图的子视图。

所以现在我可以在这 3 个导航控制器之间滚动,但问题是当我在其中一个中推送另一个视图控制器时,我仍然可以向左/向右滚动到其他的。

我正在为这个问题寻找一些优雅的解决方案,而不仅仅是在 viewDidApear/viewDidDisapear 中禁用/启用滚动

【问题讨论】:

禁用/启用滚动有什么问题?为您的 3 个根控制器创建自定义类并在他们的 viewDidApear/viewDidDisapear 中处理它对我来说似乎并不那么脏...... viewDidAppear 一直处于活动状态,因此您希望尽量减少放入其中的代码。 【参考方案1】:

尝试将代码放入 NavigationController 委托方法之一 - 请注意,您的所有 NavigationController.delegate 都应设置为 self。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated  

      if (viewController == RootviewController1 || viewController == RootvirewController2 || viewController = RootviewController3)  
             scrollview.ScrollEnabled = YES; 
     else 
             scrollview.ScrollEnabled = NO; 

 return;
 

【讨论】:

以上是关于在导航控制器顶部控制器之间滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动时隐藏导航栏,除非在屏幕顶部

导航栏应该贴在顶部

滚动视图中的内容随着导航菜单的高度值向下移动

视图控制器中的集合视图,单元格触摸集合视图本身的顶部边框(嵌入在导航控制器中)

在视图控制器中垂直居中并在 swift 中使用导航栏?

UITableView:向上滑动时收缩标签栏和导航栏