Вид отрезается (альбомная или книжная ориентация)


Я сталкивался с этой проблемой бесчисленное количество раз и не могу понять, как ее решить. Я работаю в проекте Xcode (пустой проект-нет XIB!). У меня установлена ориентация на ландшафт:

Введите описание изображения здесь

Но это продолжается:

Введите описание изображения здесь

Вид отключается. Независимо от того, что я делаю, он, кажется, не устанавливается в надлежащий размер. По какой-то причине он отображает вид в альбомной ориентации, используя границы портрета. Кто-нибудь знает, как это исправить? Я тоже этого хочу ограничьте ориентацию только ландшафтом.

Обновление Вид не будет обрезан, если я жестко закодирую 1024 как ширину и 768 как высоту. Очевидно, что это ужасное решение, но я не могу понять его. Кто-нибудь там знает решение?

2 2

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];
}