Странное поведение Высота UIView изменяется

Я столкнулся с тем, что я считаю странным поведением. Было бы хорошо, если бы кто-нибудь мог это прояснить.

В viewDidLoad изначально я печатаю высоту и ширину границ UIView, например,

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

}

который печатает: WxH = 320.000000x548.000000

Теперь, скажем, я поворачиваю контроллер View на Landscape, а затем вернусь к портрету и напечатаю ту же высоту и ширину. Вот так:

- (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? (Затем он остается таким же все время)

Ответ 1

Портрет iphone height Всего 480, 20 для строки состояния, оставшейся 460 для self.view.

Вы можете лучше просмотреть журнал в виде

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

Это выглядит так, потому что

Разрешение находится в точках, а не в пикселях. Ваш код должен использовать точки, чтобы он работал на любом устройстве - сетчатке или сетчатке. (Чтобы уточнить - на экране сетчатки каждый пиксель экрана равен 0,5x0,5 балла, на не сетчатке, пиксели в два раза больше, 1x1 точек)

Ответ 2

Вместо того, чтобы получать/устанавливать границы/размер в ViewDidLoad, выполните коды в ViewWillAppear.

Это не "технический" ответ, но он выполнил эту работу для меня.