Xcode Autolayout - просмотр повернут, если флажок не установлен

Я создал приложение в Xcode 4.5 с включенным автомакетом. Поскольку он не совместим с iOS 5 (не знал перед тестированием), я отключил автомакет из раскадровки. Теперь содержимое представления поворачивается по часовой стрелке при тестировании в симуляторе.

Изначально приложение находится в альбомной ориентации (отлично выглядит в Xcode). Симулятор запускается в альбомной ориентации, но все внутри вида выглядит так, как будто оно было повернуто после снятия отметки с автомакета.

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

Я попытался с новым контроллером представления, и он все еще отображается, как указано выше. Изначально установлена ​​альбомная ориентация. Любое решение?


person NoMachine    schedule 25.02.2013    source источник


Ответы (2)


Для решения проблемы с ориентацией сделайте следующее.

Определите эти макросы в файле .pch

#define IOS_OLDER_THAN_6        ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] <  6.0 )
#define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 )

и напишите этот метод внутри вашего viewContrller.m

#ifdef IOS_OLDER_THAN_6
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
    (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
#endif

#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate
{
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}
#endif
person βhargavḯ    schedule 25.02.2013
comment
Обратите внимание, что директивы препроцессора (#define, #ifdef) раскрываются в во время компиляции, а не во время выполнения. Оба макроса определяются при компиляции исходного кода, поэтому все три метода будут скомпилированы в исполняемый файл. - person Martin R; 25.02.2013

И еще одна вещь, когда речь идет о UINavigationController, создайте подклассы UINavigationController и overriding supportedInterfaceOrientations.

 #import "UINavigationController+Orientation.h"

 @implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
 {
    return YES;
 }

@end  

Теперь контейнеры iOS (например, UINavigationController) не консультируются со своими дочерними элементами, чтобы определить, следует ли им выполнять автоповорот.
Как создать подкласс
1. Добавьте новый файл (цель c-категория в какао touch)
2. Category : Ориентация Category On: UINavigationController
3. Добавьте приведенный выше код в UINavigationController+Orientation.m

person Anil Varghese    schedule 25.02.2013