Можно ли узнать, находится ли пользовательский интерфейс приложения в горизонтальной ориентации после того, как устройство было установлено на поверхности?

Я определяю смещение кадра для клавиатуры, если пользователь держит iPad в альбомном режиме. Я обнаружил, что не могу правильно установить смещение, если добавляю контент в ландшафтном режиме, а затем устанавливаю iPad на ровную поверхность. Я использую код ниже, чтобы установить смещение:

if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {
    tableView.frame = CGRectMake(0,0,tableView.frame.size.width, tableView.frame.size.height-keyboardsize.height);
}

UIDeviceOrientations, которые я могу проверить:

typedef enum {
   UIDeviceOrientationUnknown,
   UIDeviceOrientationPortrait,
   UIDeviceOrientationPortraitUpsideDown,
   UIDeviceOrientationLandscapeLeft,
   UIDeviceOrientationLandscapeRight,
   UIDeviceOrientationFaceUp,
   UIDeviceOrientationFaceDown
} UIDeviceOrientation;

(источник: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html)

Могу ли я проверить / узнать, удерживал ли пользователь приложение в альбомной ориентации (UIDeviceOrientationLandscapeLeft или же UIDeviceOrientationLandscapeRight) и затем установите устройство вниз (что должно быть UIDeviceOrientationFaceUp)

1 ответ

Решение

Вас интересует не ориентация устройства, а ориентация интерфейса. Попробуйте использовать self.interfaceOrientation (где self это ваш вид контроллера). Вы также можете получить это от [[UIApplication sharedApplication] statusBarOrientation],

При этом, вы, вероятно, не должны использовать ориентацию интерфейса вообще, чтобы узнать, где находится клавиатура. Клавиатура генерирует уведомления о появлении и перемещении, которые включают информацию о положении. Посмотрите на UIKeyboardWillShowNotification а также UIKeyboardWillChangeFrameNotification, У них есть информация о положении в их словаре userInfo под UIKeyboardFrameBeginUserInfoKey а также UIKeyboardFrameEndUserInfoKey клавиши, которые скажут вам, где будет клавиатура.

Другие вопросы по тегам