Странное поведение Высота 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.
Это не "технический" ответ, но он выполнил эту работу для меня.