0

无论方向如何,主屏幕和 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
4

3 回答 3

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
}

主视图的默认自动调整大小掩码

于 2012-11-05T09:20:30.390 回答
1

实际上它不仅仅是自动调整大小的面具。所以当你改变设备的方向时,屏幕的物理特性保持不变。如果您将视图设置为自动旋转,则会为您转换宽度和高度。因此,当要求具有翻译视图的屏幕尺寸时,它的 imp。让您根据self.view.centerorself.view.bounds而不是在 上进行计算self.view.frame

于 2012-11-05T09:28:16.983 回答
1

[UIScreen mainScreen]对于 iPhone,总是320w480h568h对于 iPhone5)。正在为纵向拍摄
尺寸。[UIScreen mainScreen]

根据您的,设备状态栏在您的应用中可见NSLog。因此,您有300h横向和460h纵向。

于 2012-11-05T09:33:33.990 回答