Как сказал @bandejapaisa, я обнаружил, что ориентация была проблемой, по крайней мере, во время моих тестов.
Во-первых, использование kbSize.height
вводит в заблуждение, поскольку в альбомной ориентации оно представляет ширину клавиатуры. Итак, поскольку ваш код находится в UIViewController
, вы можете использовать его следующим образом:
float insetAmount = (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)?kbSize.height:kbSize.width) - heightOfBottom;
self.interfaceOrientation
задает ориентацию интерфейса (может отличаться от ориентации устройства), а макрос UIInterfaceOrientationIsPortrait
возвращает YES
, если задана ориентация Portrait (вверху или внизу). Так как высота клавиатуры равна kbSize.height
, когда интерфейс - Портрет, и kbSize.width
, когда интерфейс - Пейзаж, нам просто нужно проверить ориентацию, чтобы получить правильное значение.
Но этого недостаточно, потому что я обнаружил ту же проблему со значением self.view.frame.size.height
. Поэтому я использовал тот же обходной путь:
float heightOfBottom = (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)?self.view.frame.size.height:self.view.frame.size.width) - screenHeightMinusBottom;
Надеюсь, это поможет ...