我有一个观点,我在loadview中创建如下:
- (void)loadView {
UIView *mainView = [[UIView alloc] initWithFrame:[UIApplication sharedApplication].keyWindow.bounds];
self.view = mainView;
[mainView release];
}
所以,如果我打印视图我得到了结果: > 好的,这就是我想要的,767x1024
问题是,如果我称这种方法:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
并呈现一个modalViewController,然后在我以前的视图控制器上解除它,打印方法viewDidAppear和viewWillAppear我得到了这个:
viewWillAppear中:
[<UIView: 0x4e946a0; frame = (0 0; 768 1024); layer = <CALayer: 0x4e946d0>>]
viewDidAppear:
[<UIView: 0x4e946a0; frame = (0 0; 768 1004); layer = <CALayer: 0x4e946d0>>]
为什么视图大小会改变20?我知道这与状态栏有关,但无法弄清楚。
感谢。
答案 0 :(得分:1)
你是对的。状态栏默认大小为20像素高。当状态栏出现时,UIViewController会自动调整子视图大小。根据Apple文档“当视图控制器显示在屏幕上时,其根视图通常会调整大小以适应可用空间,这可能会根据窗口的当前方向和状态栏等其他界面元素的存在而变化。” - http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html