2015-04-22 3 views
0

Я создаю ландшафтное приложение в Xcode 6. Когда я запускаю его на симуляторе iOS 8.3, [UIScreen mainScreen].bounds - это 667x375, но когда я запускаю его на iPhone 6 iOS 8, [UIScreen mainScreen].bounds375x667. Это вызывает проблемы для моего приложения, так как многие элементы имеют размер экрана. Я знаю, что [UIScreen mainScreen].bounds изменен в iOS 8, но это не проблема. Это должно быть 667x375 как на устройстве, так и на симуляторе. Я бы предоставил код, но я понятия не имею, где проблема.[UIScreen mainScreen] .bounds дает неправильное значение

ответ

0

На iOS8 рамка окна будет меняться как ориентация устройства. Я думаю, что размер 667x375 - это размер вашего устройства.

+0

Тогда почему мой iPhone 6 NSLog, что ориентация «375x667» при запуске приложения без изменений на iPhone 6 симулятор NSLogs '667x375'? – TheCodeMan54

+1

Может быть, ваш симулятор - это пейзаж на одном 6+ и портрет на 6. Попробуйте настроить ориентацию вашего симулятора на cmd + влево/вправо. – user3349433

+0

Спасибо за предложение, но мой симулятор в пейзаже. Приложение действительно отлично работает в симуляторе, но не в устройстве. Физическое устройство, как представляется, дает неверные оценки. – TheCodeMan54

1
iOS 8.3 iPhone6 Simulator 
    Portlait 
          bounds:{{0, 0}, {375, 667}} 
       applicationFrame:{{0, 20}, {375, 647}} 
        nativeBounds:{{0, 0}, {750, 1334}} 

    Landscape 
          bounds:{{0, 0}, {667, 375}} 
       applicationFrame:{{0, 0}, {667, 375}} 
        nativeBounds:{{0, 0}, {750, 1334}} 

iOS 8.3 iPhone6 Device 
    Portlait 
          bounds:{{0, 0}, {375, 667}} 
       applicationFrame:{{0, 20}, {375, 647}} 
        nativeBounds:{{0, 0}, {750, 1334}} 
    Landscape 
          bounds:{{0, 0}, {667, 375}} 
       applicationFrame:{{0, 0}, {667, 375}} 
        nativeBounds:{{0, 0}, {750, 1334}} 

На iOS 8.3 результаты симулятора и устройства точно такие же. Если сообщаемая ситуация возникает только на устройстве iOS 8, как насчет таргетинга вашего приложения на iOS 8.3?

+0

Это был мой опыт (на iOS 8.1.3, 8.2 и 8.3). – zpasternack

0

Вот метод быстрого класса я использую, чтобы изменить размер экрана вернуться к тому, что было раньше IOS 8 (высота переключения и ширина)

+ (CGSize)getScreenSize { 

    CGSize screenSizeRef = [[UIScreen mainScreen] bounds].size; 

    if (screenSizeRef.width > 450 && UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) { 
     // iPhone 6+ width on portrait is 414 
     return CGSizeMake(screenSizeRef.height, screenSizeRef.width); 

    } 

    if (screenSizeRef.width > 900 && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 

     return CGSizeMake(screenSizeRef.height, screenSizeRef.width); 

    } 
    return screenSizeRef; 
} 

Так вместо вызова [[UIScreen mainScreen] bounds], поставить этот метод в новом классе (чтобы вы могли получить доступ к нему из любой точки программы) и установите ссылку на размер экрана на возвращаемое значение getScreenSize

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