奇怪的行为UIView高度变了

时间:2013-07-26 11:28:17

标签: ios objective-c

我遇到了我认为奇怪的行为。 如果有人能澄清这一点会很好。

在viewDidLoad中,我最初打印UIView边界的高度和宽度,就像这样

-(void) viewDidLoad
{
    NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height);

}

打印:WxH = 320.000000x548.000000

现在,假设我将View控制器旋转到横向 - 然后再回到纵向,并打印相同的高度和宽度。像这样:

- (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? (然后它一直保持这样)

2 个答案:

答案 0 :(得分:0)

纵向iphone身高总共480,状态栏为20,其余为460. self .view。

您可以更好地查看日志

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

看起来是因为

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

答案 1 :(得分:0)

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

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