0

我遇到了我认为奇怪的行为。如果有人能澄清这一点,那就太好了。

在 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?(然后就一直这样)

4

2 回答 2

0

Portrait iphone 高度 Total 480 ,20 为状态栏剩余 460 为 self.view。

您可以以更好的方式查看日志

NSLog(@"%@",NSStringFromCGRect(self.view.bounds));

看起来是因为

分辨率以点为单位,而不是像素。您的代码应该使用点,以便它可以在任何设备上运行——视网膜或非视网膜。(澄清一下——在视网膜显示器上,每个屏幕像素是 0.5x0.5 点,在非视网膜上,像素是两倍大小,1x1 点)

于 2013-07-26T11:31:13.047 回答
0

而不是在 ViewDidLoad 中获取/设置边界/大小,而是在 ViewWillAppear 中执行代码。

这不是一个“技术”的答案,但它为我完成了工作。

于 2013-07-26T13:06:39.210 回答