【发布时间】:2023-03-22 16:14:01
【问题描述】:
我遇到了我认为奇怪的行为。 如果有人能澄清这一点,那就太好了。
在 viewDidLoad 中,最初我打印 UIView 边界的高度和宽度,像这样
-(void) viewDidLoad
{
NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height);
}
打印:WxH = 320.000000x548.000000
现在,假设我将视图控制器旋转到横向 - 然后返回纵向,并打印相同的高度和宽度。像这样:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
duration:(NSTimeInterval)duration
{
// If the orientation is rotating to Portrait mode...
if (UIInterfaceOrientationIsPortrait(x))
{
NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height);
}
else // If the orientation is rotating to Landscape mode
{
}
}
在此之后,每次我旋转时,上述方法都会打印WxH = 320.000000x460.000000(即使我在开始时打印548时处于纵向模式)
为什么高度变成了460? (然后就一直这样)
【问题讨论】:
-
我假设您在 Retina 4 英寸显示屏上进行测试,您能否确认
UIView的AutoResizing属性已设置为完全调整大小? -
@iphonic:当我单击为我的视图控制器自动创建的 XIB 模板时,所有 6 条自动调整大小的线都设置为红色。我也像这样打印它:
NSLog(@"mask: %d", self.view.autoresizingMask);它打印 18 -
我猜超级视图会自动调整其子视图的大小。在 IB 中检查 superview 的属性。而且您的超级视图的大小在设备上与在 IB 中的大小不完全相同。
-
顺便说一句, willAnimateRotation ... 在旋转实际发生之前被调用。因此,当方向仍然是纵向时,会打印您的 NSLog,然后再将其旋转为横向。 (当然是在设备物理旋转之后)。
-
@Hermann Klecker:我正在使用 6.1 版模拟器。我用 XIB 文件创建了一个 ViewController。所以我直接使用由 XCode 创建的视图控制器的视图。 PS。您的意思是当方向仍处于横向模式时调用我的 NSLog?当我旋转到横向模式时会打印出来(如果我也将日志添加到 else 子句):` {{0, 0}, {480, 300}}`。如果我旋转到纵向模式,则会打印:{0, 0}, {320, 460}}。无论如何,您永远不会看到最初打印的 548。
标签: ios objective-c