Пейзаж только UIViewController в UINavigationController
Я имею UITableViewController
в котором на одной вкладке есть UINavigationViewController
, UINavigationController
корневым контроллером представления является UITableViewController, и при нажатии на ячейку, UIViewController
появляется, который должен быть заблокирован в Landscape
,
Я хочу, чтобы каждый контроллер был заблокирован в Portrait
кроме упомянутых UIViewController
это должно быть заперто в Portrait
,
Я пробовал следующее:
CustomTabBarController.m:
#import "CustomTabBarController.h"
@implementation CustomTabBarController
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// You do not need this method if you are not supporting earlier iOS Versions
return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
- (BOOL)shouldAutorotate{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
return [self.selectedViewController supportedInterfaceOrientations];
}
@end
CustomNavigationController.h:
#import "CustomNavigationController.h"
@implementation CustomNavigationController
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate
{
return YES;
}
@end
И в UIViewController, который должен быть привязан к ландшафту, я поставил:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
-(BOOL)shouldAutorotate
{
return YES;
}
Но это не работает, я могу повернуть его в альбомную ориентацию, и он останется заблокированным в альбомной ориентации, но я хочу, чтобы он автоматически отображался в альбомной ориентации.
Какие-либо предложения?
3 ответа
Попробуйте с помощью метода заблокировать некоторые ориентации для определенного окна:
– application:supportedInterfaceOrientationsForWindow:
Попробуйте переопределить метод
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
У меня была большая проблема в прошлом с UITabBarController
не уважая мои поддерживаемые ориентации интерфейса отображаемых контроллеров представления.
Я решил проблему путем подкласса UITabBarController
и захват, когда элемент был выбран. Затем я бы сам вызвал контроллер представления, спросил, каковы поддерживаемые ориентации, и сам включил бы вращение, если это необходимо. Я также вызвал бы выбранный контроллер представления на поворотах, чтобы установить / изменить мои поддерживаемые ориентации.
Я реализовал UITabBarDelegate
и использовал didSelectItem
захватить вкладки переключателей. Я не уверен, есть ли лучший способ сделать это сейчас.