ViewController - (0,0)处的主视图元素被导航栏

时间:2016-04-10 15:09:41

标签: ios uiviewcontroller uinavigationcontroller uinavigationbar

我有一个简单的例子,我将新的viewcontroller推送到导航控制器堆栈。这个VC使用了一个xib,并且UISearchBar被约束到顶部和左侧的容器'在这种情况下,它只是主视图。

当我在堆栈上推送此VC时,看不到搜索栏。这是因为导航栏位于顶部占据设备屏幕的前50个左右的y点。 (大概是在状态栏之后开始)。

如果我将顶部容器自动布局约束设置为50,或者某个y偏移量足以抵消导航栏的高度,我将看到搜索栏。

我正在开展一个项目,我正在将VC推送到我没有创建的UINavigationController的导航堆栈上。我想知道是什么原因导致了这个(我称之为buggy)的行为。我的理解是navController中的任何viewController都会在导航/状态/标签栏的情况下调整其主视图框架。我该怎么做才能确保原点(0,0)从屏幕原点+状态栏高度+导航栏高度开始?此外,我还希望我的VC的mainView的下限结束于屏幕上显示的标签栏的顶部。我已经研究了各种UIView和ViewController属性,但还没有找到令人满意的解决方案。

2 个答案:

答案 0 :(得分:1)

如果您使用xib文件设计视图控制器,则应将此代码添加到viewDidLoad方法中:

self.edgesForExtendedLayout = UIRectEdgeNone

此行将使您的视图控制器视图显示在导航栏下。

答案 1 :(得分:0)

传统上,任何新的UIViewControllers都是在故事板上完成的,而且有些开发人员会在第一个和第二个UIViewController之间连接分段。这是因为通过实现推送segue,第二个UIViewController超过第一个,第二个将继承第一个具有的任何属性(例如导航栏,工具栏,tabbar),它显示在故事板立即。

因此,知道要分配给UIViewControllerUINavigation的空间的第二个UITabbar会更容易。

如果您的VC是在XIB接口上完成的,而不是挂钩到之前ViewControllers的UINavigationController受控堆栈,那么我猜您没有看到UINavigationBarUITabBar的空间UINavigationBar据说会占用您的界面?

也许您可以尝试将约束设置为从顶部布局指南下方的64点开始(为UITabbar腾出空间),并在底部布局指南上方设置49(以腾出空格sm.add_constant(testmat[60], has_constant='add') )。 / p>

相关问题