2014-10-09 3 views
5

Это только проблема с iOS 8, клавиатура отображается правильно в iOS 7 с изменением ориентации устройства. Мое приложение поддерживает как портретную, так и альбомную ориентацию и использует автозапуск.iOS 8 Изменение ориентации: рамка клавиатуры отображается неправильно

Если я подталкиваю подкласс UIViewController, который содержит подкласс UITextField, в стек навигации, а UITextField становится первым ответчиком в портретной ориентации, тогда клавиатура по умолчанию отображается правильно. Однако, если я поворачиваю устройство в альбомную ориентацию, то макеты представления subview UIViewController отображаются корректно, но клавиатура отображается в верхней центральной части экрана. Ориентация клавиатуры правильна для альбомной ориентации, но ширина рамки такой же, как и для портретной ориентации. Если я настрою ориентацию приложения только на альбомную ориентацию, клавиатура не будет отображаться правильно. Это только проблема изменения ориентации iOS 8.

+2

Я думаю, что это может быть ошибка iPhone 6. – MobileDev98

ответ

4

До IOS 8 местоположение и ширина/высота клавиатуры всегда были относительно ориентации на порт, когда сообщается в приложение. (например, ширина клавиатуры для ландшафтов находится в направлении y, ~ 352 пикселя на iPad.) Начиная с iOS 8, это было обновлено, чтобы всегда иметь (0,0) в левом верхнем углу вашего (физического) вида и ширины/height отражают ориентацию x/y, которую вы обычно ожидаете за пределами iOS. Если вы ранее позиционировали свою клавиатуру через что-то вроде keyboardDidShow[notification userInfo], вы получите номера, которые не совсем понятны. Вы можете использовать что-то вдоль этих линий, чтобы принять во внимание предварительные iOS8 идиосинкразии:

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float height, width; 
    if(UIInterfaceOrientationIsPortrait(orientation)){ 
     width = keyboardSize.width; 
     height = keyboardSize.height; 
    } else { 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1){ 
      width = keyboardSize.height; 
      height = keyboardSize.width; 
     } else { 
      width = keyboardSize.width; 
      height = keyboardSize.height; 
     } 
    } 

    // Remainder of function 
} 

который может быть переработан до ...

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float width = keyboardSize.width; 
    float height = keyboardSize.height; 
    if(!UIInterfaceOrientationIsPortrait(orientation) && (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1)){ 
     width = keyboardSize.height; 
     height = keyboardSize.width; 
    } 

    // Remainder of function 
} 

Кроме того, на 8,1 обновление исправлен ряд пейзаж/вращение ошибки, связанные с указанным выше изменением. Возьмите обновление и посмотрите, решит ли это вашу проблему.

3

Это не ошибка iOS8 или iPhone 6. Это проблема правильной миграции старых проектов на xCode6.

Вам просто нужно добавить Launch screen interface file base name ключ Info.plist файл.

Подробное объяснение этого случая вы можете найти here.

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