2013-05-27 10 views
2

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

enter image description here

Но это держит происходит:

enter image description here

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

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

+0

Вы используете UISplitViewController? – KishoreK

+0

Нет. Это просто UIViewController. – tentmaking

ответ

0

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

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

Проверьте 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; 
} 
+0

Я добавил эти методы, они ничего не сделали. Я предполагаю, что они вызываются автоматически? Я позвонил им прямо и ничего не изменил. – tentmaking

+0

Также добавьте приложение-приложение непосредственно - (NSUInteger) приложение: (приложение UIApplication *) поддерживаетсяInterfaceOrientationsForWindow: (UIWindow *) окно { return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationLandscapeRight; } – Kedar

+0

Это тоже не сработало. Эта ошибка убивает меня. Я не понимал, что так сложно установить ориентацию. – tentmaking

Смежные вопросы