View height problems (continued)
这是我在这里遇到的问题(仍然没有解决)的延续:链接
但这可能有助于理解问题所在。我只创建了一个简单的测试项目("空应用程序"),并添加了一个带有XIB文件的视图控制器(选中复选框:"带有用于用户界面的XIB文件")。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"didLoad: %@",NSStringFromCGRect(self.view.bounds)); // Do any additional setup after loading the view from its nib. } -(void) viewDidAppear:(BOOL)animated { NSLog(@"didAppear: %@",NSStringFromCGRect(self.view.bounds)); } |
这是输出:
1 2 | 2013-07-26 17:05:28.502 testtest[5926:c07] didLoad: {{0, 0}, {320, 548}} 2013-07-26 17:05:28.506 testtest[5926:c07] didAppear: {{0, 0}, {320, 460}} |
他们为什么不一样?
(我正在6.1模拟器上测试)
当调用
稍后,当调用
在您的情况下,您的故事板或XIB文件似乎被设置为iPhone 5屏幕大小(548=1136/2-状态栏),并且您正在使用480x320点屏幕的iPhone 5之前的模拟器或设备中进行测试,因此视图的大小被调整到460点高以适应屏幕。
这可能有完美的感觉。
当第一次访问
例如,如果您从一个ib文件加载视图,那么您将在
相反,您应该创建所有可调整大小的元素(使用spring&struts、autolayout或任何其他类似选项),以便在设置框架时正确显示这些元素。
第一次调用
这是怎么发生的?它看起来像
因此,在将完全加载的视图放入视图层次结构之前,需要它。这就限制了在
通过这种理解,您可以看到当调用
更新
如果需要将自定义布局应用于视图的子视图,则可以考虑子类化
除此之外,你在使用
据我所知,viewdidload将为您的应用程序设置定义的界限,在rootviewcontroller/xib文件中为根视图,或者可能是appdelegate。
如果您定义了应用程序的边界(不确定其中的哪一个),整个应用程序中的viewdidload函数将首先根据该边界设置高度。
加载视图并准备好"显示"后,可以请求实际边界。因此,建议在viewwillappear/viewdidappear方法中请求边界/大小。
When a
ViewController presents its view, it normally shrinks that
view so that its frame does not overlap the device’s status bar.
所以当你在
Setting this property to YES causes the view controller to size its
view so that it fills the entire screen, including the area under the
status bar. (Of course, for this to happen, the window hosting the
view controller must itself be sized to fill the entire screen,
including the area underneath the status bar.) You would typically set
this property to YES in cases where you have a translucent status bar
and want your view’s content to be visible behind that view.