В некоторых случаях я хочу добавить панель инструментов в верхнюю часть клавиатуры iPhone (как, например, в iPhone Safari, когда вы перемещаетесь по элементам формы).
В настоящее время я указываю прямоугольник панели инструментов с константами, но поскольку другие элементы интерфейса находятся в постоянном движении - панели инструментов и панели навигации вверху экрана - каждый раз, когда мы вносим незначительные изменения в интерфейс, панель инструментов выходит из выравнивания.
Есть ли способ программно определить положение клавиатуры по отношению к текущему виду?
источник
Итак, в основном:
В методе инициализации:
А затем используйте методы, упомянутые выше, чтобы отрегулировать положение полосы:
Можно было бы сделать это красивым, анимировав изменение позиции, обернув его
источник
UIKeyboardFrameBeginUserInfoKey
которые дают ту же информацию.UIKeyboardFrameEndUserInfoKey
чтобы получить последний кадр (в экранных координатах) клавиатуры. Вы также можете использоватьUIKeyboardAnimationDurationUserInfoKey
и,UIKeyboardAnimationCurveUserInfoKey
чтобы получить остальные параметры, которые вам нужны, чтобы точно соответствовать поведению клавиатуры.Это основано на существующем ответе от tonklon - я просто добавляю фрагмент кода, который показывает полупрозрачную черную панель инструментов в верхней части клавиатуры вместе с кнопкой «Готово» справа:
и
-resignKeyboard
выглядит так:Надеюсь, это кому-то поможет.
источник
Если вы зарегистрируетесь для получения уведомлений с клавиатуры, т. Е. И т.
UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
Д., Полученное вами уведомление будет содержать границы клавиатуры вuserInfo
dict (UIKeyboardBoundsUserInfoKey
).См.
UIWindow
Ссылку на класс.источник
В версии 3.0 и выше вы можете получить продолжительность анимации и кривую из
userInfo
словаря уведомлений.например, чтобы анимировать размер представления, чтобы освободить место для клавиатуры, зарегистрируйтесь
UIKeyboardWillShowNotification
и сделайте что-то вроде следующего:Сделайте аналогичную анимацию для
UIKeyboardWillHideNotification
.источник
Создайте этот метод и вызовите его в ViewWillLoad:
источник
Нет способа (AFAIK) получить размеры представления клавиатуры. Однако он постоянен, по крайней мере, до сих пор в каждой версии iPhone.
Если вы рассчитываете положение панели инструментов как смещение от НИЖНЕЙ части вашего представления и принимаете во внимание размер вашего представления, то вам не нужно беспокоиться о том, присутствует ли панель навигации или нет.
Например
Вместо определения вы можете легко создать
keyboardHeight
функцию, которая возвращает размер в зависимости от того, отображается ли клавиатура, и переместить это позиционирование панели инструментов в отдельную функцию, которая реорганизует ваш макет.Также это может зависеть от того, где вы делаете это позиционирование, так как возможно, размер вашего представления может меняться между загрузкой и отображением в зависимости от настроек вашей панели навигации. Я считаю, что лучшим местом для этого было бы viewWillAppear.
источник