Note: Because the amount of space available for the custom view can vary
(depending on the size of the other navigation views), your custom view’s
autoresizingMask property should be set to have a flexible width and height.
Before displaying your view, the navigation controller automatically
positions and sizes it to fit the available space.
这很好,除了......我需要知道UINavController将使用 BEFORE 的大小将视图添加到框架中,因为我将要显示的内容因大小而异。
这是在UIViewController的“loadView”方法中,它被添加到UINavigationController。
答案 0 :(得分:5)
嗯,从技术上讲,您不应该使用loadView
方法调整子视图的大小。我不使用nib,在几乎所有的视图控制器中loadView
都非常小:self.view = [[UIView alloc] init];
。然后,在viewDidLoad
中,我将所有子视图添加到self.view
。最后,我在viewWillAppear
中完成了所有调整大小,因为此时self.view
将是合适的大小。
如果您必须使用loadView
方法调整视图大小,则必须手动计算尺寸...即:找出设备的方向(self.interfaceOrientation
)确定屏幕尺寸,减去你认为在屏幕上的任何其他元素(如导航栏等)。但不建议使用此方法。
答案 1 :(得分:1)
由于未记录导航控制器内的视图层次结构,因此可能无法获得此信息的可靠方法。
你必须:
要么self.navigationController.view
询问其边界并手动减去导航栏占用的房间(如果navigationBarHidden
为NO
)和工具栏(如果{{1}是} toolbarHidden
),
或手动遍历NO
的子视图,并尝试识别内容视图(如果存在此类事物)或其他视图占用的空间。
这两种解决方案都依赖于可能在未来的iOS版本中发生变化的内部结构,因此远非最佳。你不能等到self.navigationController.view
决定要显示什么内容吗?
答案 2 :(得分:0)
如何在viewController.view.frame属性中使用KVO?