6

iPad 上ViewController.m,如果我们在点击事件处理程序中打印出视图的框架高度:

NSLog(@"Height of main view is %f", self.view.frame.size.height);

然后在纵向模式下,值为 1004(设备状态行为 20 像素,因此 1024 - 20 = 1004),如果设备旋转到横向模式,我预计它约为 768 或 748,但打印的值是实际上是1024。(更新:如果应用程序以横向模式启动,那么没有旋转,它也打印为1024)。 为什么会这样,是否有经验可以期望获得 748 或 768 的值?(是否有不止一种方法可以做到这一点?)

4

3 回答 3

4

在 Apple 的文档中,关于 UIView 的框架:

警告:如果变换属性不是恒等变换,则此属性的值未定义,因此应被忽略。

所以你应该使用bounds属性。

于 2012-05-23T05:42:22.253 回答
1

您可以改为以编程方式管理方向并覆盖 willRotateToInterfaceOrientation 方法。看路:

#define IPAD_SIZE_PORTRAIT          CGSizeMake(768, 960)
#define IPAD_SIZE_LANDSCAPE         CGSizeMake(1024, 704)

-(void)relayoutSubviews:(UIInterfaceOrientation)orientation
{
CGSize  scrSize;

if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight))
{
    scrSize = IPAD_SIZE_LANDSCAPE;
}
else
{
    scrSize = IPAD_SIZE_PORTRAIT;
}

self.view.bounds = CGRectMake(0, 0, scrSize.width, scrSize.height);
self.view.frame = CGRectMake(0, 0, scrSize.width, scrSize.height);
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self relayoutSubviews:toInterfaceOrientation];
}
于 2012-05-23T06:22:46.190 回答
0

这背后的原因是,当您旋转设备时,视图的框架会发生变化以适应状态栏,但实际上并不会旋转视图的框架。设备只是将视图呈现为旋转状态,而视图实际上并未旋转。我相信子视图会受到这种变化的影响,但整体视图不会。

于 2012-05-23T05:16:23.250 回答