我有一个简单的例子,我将新的viewcontroller推送到导航控制器堆栈。这个VC使用了一个xib,并且UISearchBar
被约束到顶部和左侧的容器'在这种情况下,它只是主视图。
当我在堆栈上推送此VC时,看不到搜索栏。这是因为导航栏位于顶部占据设备屏幕的前50个左右的y点。 (大概是在状态栏之后开始)。
如果我将顶部容器自动布局约束设置为50,或者某个y偏移量足以抵消导航栏的高度,我将看到搜索栏。
我正在开展一个项目,我正在将VC推送到我没有创建的UINavigationController
的导航堆栈上。我想知道是什么原因导致了这个(我称之为buggy)的行为。我的理解是navController中的任何viewController都会在导航/状态/标签栏的情况下调整其主视图框架。我该怎么做才能确保原点(0,0)从屏幕原点+状态栏高度+导航栏高度开始?此外,我还希望我的VC的mainView的下限结束于屏幕上显示的标签栏的顶部。我已经研究了各种UIView和ViewController属性,但还没有找到令人满意的解决方案。
答案 0 :(得分:1)
如果您使用xib文件设计视图控制器,则应将此代码添加到viewDidLoad
方法中:
self.edgesForExtendedLayout = UIRectEdgeNone
此行将使您的视图控制器视图显示在导航栏下。
答案 1 :(得分:0)
传统上,任何新的UIViewControllers
都是在故事板上完成的,而且有些开发人员会在第一个和第二个UIViewController
之间连接分段。这是因为通过实现推送segue,第二个UIViewController
超过第一个,第二个将继承第一个具有的任何属性(例如导航栏,工具栏,tabbar),它显示在故事板立即。
因此,知道要分配给UIViewController
或UINavigation
的空间的第二个UITabbar
会更容易。
如果您的VC是在XIB
接口上完成的,而不是挂钩到之前ViewControllers的UINavigationController
受控堆栈,那么我猜您没有看到UINavigationBar
和UITabBar
的空间UINavigationBar
据说会占用您的界面?
也许您可以尝试将约束设置为从顶部布局指南下方的64点开始(为UITabbar
腾出空间),并在底部布局指南上方设置49(以腾出空格sm.add_constant(testmat[60], has_constant='add')
)。 / p>