Iphone 为什么self.bounds.size.height在此代码中不考虑UINavigationView导航条?
我有一个配置UITableView,可以通过UINavigationController方法启动颜色选择器:Iphone 为什么self.bounds.size.height在此代码中不考虑UINavigationView导航条?,iphone,ios,uiview,uinavigationcontroller,bounds,Iphone,Ios,Uiview,Uinavigationcontroller,Bounds,我有一个配置UITableView,可以通过UINavigationController方法启动颜色选择器: [self.navigationController pushViewController:colorPickerViewController animated:YES]; [colorPickerViewController release]; 这意味着颜色选择器在顶部有一个导航栏(和后退按钮) ColorPickerViewControl及其视图ColorPickerView的结构
[self.navigationController pushViewController:colorPickerViewController animated:YES];
[colorPickerViewController release];
这意味着颜色选择器在顶部有一个导航栏(和后退按钮)
ColorPickerViewControl及其视图ColorPickerView的结构如下所示:
- ColourPickerViewController - in it's XIB file at the top level view it has:
- ColorPickerView : UIView (i.e. custom UI view) - in it's methods it has:
- (id)initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) {
CGFloat currVertBounds = self.bounds.size.height;
这里的问题是currVertBounds的值即将达到480,因此它没有考虑导航栏
问题:如何获得ColorPickerView实例的真实显示高度?
这是否与试图在自定义UIView中计算布局有关,并且在该阶段,自定义视图可能没有在总体controll/navigationController中呈现 是的,这是正确的,因为UINavigationController的实例是在您的(delegate.h)中声明的&导航栏被添加到窗口中而不是在您的self.view中 当您检查当前视图的边界时,它肯定会返回320*480。
它不应该在视图中包含导航栏的高度,因为它不在该视图中。它在窗口上。根据定义,在Interface Builder中创建iPhone视图时,其高度为480像素,因此初始化视图时您会看到这一点。视图正确初始化并添加到视图堆栈后,将调整其大小以匹配实际可用空间 你只是在它调整之前询问它的高度视图。
尝试在
viewDidLoad
中读取高度,那么它应该是正确的。您读取边界的时间太早了。在[super initWithCoder::
期间,UIKit
中发生的任何布局/子视图魔术都不会发生。您应该阅读bounds
并将您的视图布局为:
在viewdiload
/视图中将出现,并为所有手动创建的UI元素设置自动调整大小参数,以便它们可以根据不同的界面方向移动。在这些函数中,我不会依赖于bounds
是否完全正确,但我会说它至少是正确的高宽比。不过,它可能是在错误的方向
如果要手动定位元素,请在视图中显示。当您点击viewdide时,所有的大小调整都已经发生了,唯一需要担心的是将来的旋转,您应该在WillAnimateRotationInterfaceOrientation:duration:
中调整视图
关于国家的文件:
调用此方法时,interfaceOrientation属性已设置为新方向。因此,您可以在此方法中执行视图所需的任何其他布局
iOS 5.0文档添加了以下条款:
…设置为新方向,视图的边界已更改。因此
我认为以前的iOS版本仍然如此。您想更改导航栏或nt的高度。