Отрезанный вид (альбомная или портретная ориентация)

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

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

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

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

2 ответа

Решение

У меня есть ответ! Один из моих друзей помог мне с этим.

Представления не ориентированы до тех пор, пока они не появятся, поэтому, если вы собираетесь добавить какие-либо компоненты в представление и ожидать, что они будут придерживаться ориентации, отличной от значения по умолчанию, которое, как я подозреваю, является портретным, вы должны добавить эти компоненты в -(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];
}  

Проверьте 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; 
 }
Другие вопросы по тегам