为什么self.view的高度和宽度不同于子视图的高度和宽度?

时间:2012-11-05 09:09:38

标签: objective-c ios xcode views dimensions

主屏幕和self.view始终保持相同的宽度和高度尺寸,无论方向如何(即使self.view正确地重新调整大小以适应当前的设备方向),背后的逻辑是什么?当设备方向发生变化时,self.view的子视图会返回修改后的宽度和高度尺寸吗?

NSLog(@"screen bounds w: %f, h: %f", [[UIScreen mainScreen] bounds].size.width,[[UIScreen mainScreen] bounds].size.height );

NSLog(@"self.view frame w: %f, h: %f", self.view.frame.size.width, self.view.frame.size.height );

NSLog(@"myView frame w: %f, h: %f", _myView.frame.size.width, _myView.frame.size.height );

记录输出肖像

2012-11-05 16:15:11.152 test[2807:11303] screen bounds w: 320.000000, h: 480.000000
2012-11-05 16:15:11.153 test[2807:11303] self.view frame w: 320.000000, h: 460.000000
2012-11-05 16:15:11.153 test[2807:11303] myView frame w: 320.000000, h: 460.000000

记录输出格局

2012-11-05 16:14:38.800 test[2807:11303] screen bounds w: 320.000000, h: 480.000000
2012-11-05 16:14:38.801 test[2807:11303] self.view frame w: 300.000000, h: 480.000000
2012-11-05 16:14:38.801 test[2807:11303] myView frame w: 480.000000, h: 300.000000

3 个答案:

答案 0 :(得分:1)

这取决于您为子视图设置的autoSizingMask属性。

我认为您没有使用iOS 6.0的AutoLayout功能。如果您这样做,则需要更多地了解iOS 6.0中的约束设置。

默认情况下,您的视图的自动调整遮罩是“缩放到填充”,请参阅附图。您可以根据自己的要求为子视图设置相同的内容。在Apple文档中查看有关Struts和Springs的更多信息。

如果自动调整大小不符合您的要求,那么您需要实现自定义方法,以便在更改方向时布置视图。像下面的东西;

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [UIView animateWithDuration:duration animations:^{
        [self layoutForOrientation:toInterfaceOrientation];
    }];
}

#pragma mark - Layout views

- (void)layoutForOrientation:(UIInterfaceOrientation)orientation {
    if (UIInterfaceOrientationIsPortrait(orientation))
        [self layoutPortraitViews];
    else
        [self layoutLandscapViews];
}

- (void)layoutLandscapViews {
    // Layout your landscape views
}

- (void)layoutPortraitViews {
   // Layout your portrait views
}

default autosizing mask for main view

答案 1 :(得分:1)

实际上它不仅仅是自动调整面具大小。因此,当您更改设备的方向时,屏幕的物理特性保持不变。如果将视图设置为自动旋转,则会为您平移宽度和高度。所以当用翻译的视图询问屏幕尺寸时,它的影响。您可以根据self.view.centerself.view.bounds而非self.view.frame进行计算。

答案 2 :(得分:1)

适用于iPhone的

[UIScreen mainScreen]始终为320w480h(适用于iPhone5的568h)。
正在采用[UIScreen mainScreen]的尺寸进行纵向定位。

根据您的NSLog,您的应用中会显示设备状态栏。因此,您在横向上有300h,在纵向中有460h