Я бы на самом деле не установил ориентацию вручную, как вы делаете это в UIWebView
. Вместо этого форсируйте ориентацию родительского контроллера представления через код.
В качестве примера похожей ситуации у меня есть приложение, которое я разработал и отображает карту в нескольких видах. При повороте от портрета к ландшафту он раскладывает вид совершенно иначе, чем макет портрета с причудливой анимацией. Мне это нравится, но некоторые пользователи этого не делают, поэтому я предоставляю возможность отключить поворот карты. И я делаю это, передавая только определенные способности вращения родительскому представлению. Поэтому, если они отключают альбомную ориентацию, я говорю контроллеру представления parent , что он может поворачиваться только в альбомную ориентацию. В противном случае он может свободно поворачиваться в любой ориентации, кроме как вверх ногами.
Достаточно объяснения: вот мой соответствующий код, который я использую для этого:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
//Rotate the view if rotation is actually enabled
if ([self.prefs boolForKey:@"SHOULD_ROTATE"]) {
return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || UIInterfaceOrientationPortrait == toInterfaceOrientation);
}
//Rotate it to portrait only if rotation is disabled
else if (![self.prefs boolForKey:@"SHOULD_ROTATE"]) {
return (UIInterfaceOrientationPortrait == toInterfaceOrientation);
}
//Otherwise, rotate only to portrait (for all views minus the map views)
else {
return (UIInterfaceOrientationPortrait == toInterfaceOrientation);
}
}
Я на самом деле реализую это в UITabBarController
, чтобы оно применялось ко всем представлениям и контроллерам представлений в приложении, но это так же легко реализовать только для родительского контроллера представления UIWebView
. Суть в том, что вы возвращаете «да» или «нет» в зависимости от того, соответствует ли ориентация вида желаемой. Для веб-представления вы хотели бы указать только допустимые ориентации поворота, возвращая это:
return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)
Конечно, я не обсуждал принуждение вида установить вид в альбомной ориентации, только то, что он делает, когда пользователь поворачивает его. Таким образом, лучший способ действий - это просто сделать это вручную после инициализации представления:
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO]
Для начала вам придется установить либо Left
, либо Right
, но пользователь может поворачиваться между правым и левым, как он пожелает, если вы также реализуете мой предыдущий код.
Это много объяснений, но я думаю, что комбинация этих двух методов для родительского контроллера представления должна позволить вам представить представление именно так, как вы хотите. Дайте мне знать, если у вас есть какие-либо вопросы!