Вид отрезается (альбомная или книжная ориентация)
Я сталкивался с этой проблемой бесчисленное количество раз и не могу понять, как ее решить. Я работаю в проекте Xcode (пустой проект-нет XIB!). У меня установлена ориентация на ландшафт:
Но это продолжается:
Вид отключается. Независимо от того, что я делаю, он, кажется, не устанавливается в надлежащий размер. По какой-то причине он отображает вид в альбомной ориентации, используя границы портрета. Кто-нибудь знает, как это исправить? Я тоже этого хочу ограничьте ориентацию только ландшафтом.
Обновление Вид не будет обрезан, если я жестко закодирую 1024 как ширину и 768 как высоту. Очевидно, что это ужасное решение, но я не могу понять его. Кто-нибудь там знает решение?
2 ответа:
Проверьте rooViewController, который вы устанавливаете в
application:didFinishLaunchingWithOptions:
в классе делегата приложения. Убедитесь, что вы возвращаете правильные разрешенные ориентации в этом классе контроллера вида, объект которого вы устанавливаете в rootViewController:- (NSUInteger) supportedInterfaceOrientations{ return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationLandscapeRight; } - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); }
В делегате приложения добавьте эту функцию:
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationLandscapeRight; }
У меня есть ответ! Один из моих друзей помог мне с этим делом.
Представления не ориентируются до тех пор, пока они не появятся, поэтому, если вы собираетесь добавить какие-либо компоненты в представление и ожидаете, что они будут придерживаться ориентации, отличной от ориентации по умолчанию, которая, как я подозреваю, является портретной, вы должны добавить эти компоненты в-(void)viewDidAppear:(BOOL)animated
. Я вызывал методы, которые добавили несколько компонентов в представление из МетодаviewDidLoad
, однако представление не появилось, и ориентация не установлена, когда это метод называется. Перемещение моего кода инициализации в методviewDidAppear
устраняет мою проблему.Вот пример:
-(void)viewDidAppear:(BOOL)animated { [super viewDidLoad]; //Probably dont want to draw stuff in here, but if you did, it would adhere to the //correct orientation! CAShapeLayer *layer = [CAShapeLayer layer]; layer.backgroundColor = [UIColor blueColor].CGColor; layer.anchorPoint = CGPointMake(0, 0); layer.bounds = CGRectMake(0, 0, self.view.bounds.size.width, 300); [self.view.layer addSublayer:layer]; //Call methods from here [self initializeScrollView]; [self addItemToScrollView]; [self addGraphToView]; }