Я пишу приложение, которое я хотел бы видеть только в ландшафтном режиме.Я настроил его так, что если iPhone удерживается в портретном режиме, ничего не происходит, а текущее изображение остается в ландшафтном режиме.Симулятор iPhone запускается в ландшафтном режиме с кнопкой «Домой» справа.Если iPhone поворачивается из одного альбомного режима в другой, то происходит анимация и вид настраивается.Однако всякий раз, когда устройство находится в ландшафтном режиме с кнопкой «Домой» слева, изображение на 20 пикселей выше необходимого, показывая белую линию в нижней части экрана.
Несмотря на все попытки логически настроить это, например
self.view.frame = CGRectMake (0,20, self.view.frame.size.width, self.view.frame.size.height)
, это не решает проблему.Я учитываю строку состояния в моих вычислениях.
Файл .xib
содержит UIImageView
поверх UIView
.Это мой первый опыт применения этих методов, поэтому я прошу прощения, если решение относительно простое.Ниже приведен код для двух методов, используемых для реализации представлений в ландшафтном режиме.
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
//set up interface to only be viewed in Landscape
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
return interfaceOrientation;
else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight)
return interfaceOrientation;
else
return NO;
}
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)tointerfaceOrientation duration:(NSTimeInterval)duration {
if(UIInterfaceOrientationLandscapeRight){
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
else if (UIInterfaceOrientationLandscapeLeft) {
//shouldn't adjustment to 20 fix the view?
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
else return;
}