Отрезанный вид (альбомная или портретная ориентация)
У меня была эта проблема бесчисленное количество раз, и я не могу понять, как ее исправить. Я работаю в проекте 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;
}