ViewController - (0,0) 处的主视图元素被导航栏遮挡
Posted
技术标签:
【中文标题】ViewController - (0,0) 处的主视图元素被导航栏遮挡【英文标题】:ViewController - main view elements at (0,0) are obscured by navigation bar 【发布时间】:2016-04-10 15:09:40 【问题描述】:我有一个简单的案例,我将一个新的视图控制器推送到导航控制器堆栈上。这个 VC 使用 xib 并有一个UISearchBar
,它被限制在顶部和左侧的“容器”中,在这种情况下,它只是主视图。
当我将此 VC 推入堆栈时,看不到搜索栏。这是因为导航栏位于顶部,占据了设备屏幕的前 50 个左右的点。 (大概在状态栏之后开始)。
如果我将顶部容器自动布局约束设置为 50,或者一些足以抵消导航栏高度的 y 偏移量,我将看到搜索栏。
我正在做一个项目,我将 VC 推送到我没有创建的 UINavigationController
的导航堆栈上。我想知道什么原因会导致这种(我称之为错误)行为。我的理解是,在存在导航/状态/标签栏的情况下,导航控制器中的任何视图控制器都会对其主视图的框架进行调整。我该怎么做才能确保原点(0,0)从屏幕原点+状态栏高度+导航栏高度开始?此外,我还希望我的 VC 的 mainView 的下限在标签栏的顶部结束,也出现在屏幕上。我研究了各种 UIView 和 ViewController 属性,但没有找到令人满意的解决方案。
【问题讨论】:
【参考方案1】:如果您使用 xib 文件来设计您的视图控制器,您应该将此代码添加到您的 viewDidLoad
方法中:
self.edgesForExtendedLayout = UIRectEdgeNone
这一行将使您的视图控制器的视图布局在导航栏下方。
【讨论】:
【参考方案2】:按照惯例,任何新的UIViewControllers
都是在情节提要上完成的,一些开发人员会在第一个和第二个UIViewController
之间进行衔接。这样做的原因是因为通过实现推送 segue,第二个UIViewController
在第一个之上,第二个将继承第一个具有的任何属性(例如导航栏、工具栏、标签栏),并立即显示在故事板上.
因此,知道要为UINavigation
或UITabbar
分配多少空间,处理第二个UIViewController
会更容易。
如果您的 VC 是在 XIB
接口上完成的,而不是挂接到先前 ViewController 的 UINavigationController
受控堆栈上,那么我猜您看不到 UINavigationBar
和 UITabBar
应该占用的空间在你的界面上?
也许您可以尝试将约束设置为从顶部布局指南下方 64 点开始(为UINavigationBar
腾出空间)和底部布局指南上方 49 点(以腾出空间UITabbar
)。
【讨论】:
以上是关于ViewController - (0,0) 处的主视图元素被导航栏遮挡的主要内容,如果未能解决你的问题,请参考以下文章
位置 0 处的 ArrayList IndexOutOfBoundsException
索引 0 处的 InsertItem - DoubleLinkedList
存储到堆栈地址的双字是不是会影响地址+0..3 或地址-0..3 处的字节?
从源“http://localhost:3000”访问“http://127.0.0.1:5000/product”处的 XMLHttpRequest