2014-09-20 53 views
0

我目前正在开发一个自定义容器控制器。问题是:我如何正确设置我的后代孩子的滚动视图的内容插入? 让我们来举个例子吧。我正在做一个自定义容器控制器(CCC),底部有一个半透明的视图(如TabBar),我的容器控制器的子控制器是一个导航控制器(NC),它具有一个表视图控制器(TVC)作为儿童。因此,层次结构很简单:iOS 7自定义容器控制器 - 如何设置子控制器的视图插图?

[CCC] 
    ↑ 
[NC] 
    ↑ 
[TVC] 

现在的UINavigationController和的UITabBarController已经做到这一点:他们设置了TVC contentInset,使他们的NavBar(或的TabBar)下滚动。但是我怎样才能达到相同的行为? 我希望我的TVC(或其他)能够100%不知道其层次结构,所以我不能让TVC“手动”设置其内容插入。

我实现的第一个解决方案是在CCC中实现 - (void)viewWillLayoutSubviews并导航层次结构,查找叶控制器检查其视图是否为ScrollView。它工作正常,直到我在NC内部推出另一个TableViewController(TVC2)。这样做viewWillLayoutSubviews没有被调用,CCC无法知道其子TVC2。

UINavigationController和UITabBarController内部采用什么策略?或者我怎样才能使它工作?

回答

0

我认为改变你自己的视图控制器的顶部和底部布局指南应该让它按照你的期望工作。问题是,设置布局指南。作为一个“秘密”,布局指南实际上在内部实现为UIView高度为0的对象。因此从技术上讲,您可以更改这些视图的来源以满足您的需求。记得在每个布局过程中正确设置它们。

+0

我试图添加到我的自定义容器的方法' - (id )bottomLayoutGuide'返回实现'UILayoutSupport'的自定义'UIView'子类。长度方法返回'90.0f',但没有任何变化。我也注意到,半透明的酒吧有一个零bottomLayoutGuide。所以我认为这不是正确的做法。 – davidefender 2014-09-20 10:00:44

+0

不要返回不同的视图。相反,请获取系统布局指南视图并修改其框架。 – 2014-09-20 10:24:23

+0

不工作,表视图仍然隐藏在自定义“tabbar”下: 'UIView * bottomLayoutGuide =(UIView *)self.bottomLayoutGuide; CGRect frame = bottomLayoutGuide.frame; frame.size.height = 100; bottomLayoutGuide.frame = frame;' – davidefender 2014-09-21 17:16:00

相关问题