#iphone #ios #uitextview #inputview
#iPhone #iOS #uitextview #inputview
Вопрос:
Я написал пользовательский вид ввода, который предназначен для замены стандартной клавиатуры для UITextView
. Если я назначу свой пользовательский UIView
как свой UITextView
inputView
, он будет работать должным образом как в портретном, так и в альбомном режиме.
Проблема возникает, когда я поворачиваю устройство — всякий раз, когда я делаю это, мой пользовательский UIView
расширяется, заполняя весь экран, вместо того, чтобы просто закрывать клавиатуру. У меня нигде нет пользовательского кода изменения размера для этого — я буквально просто назначаю UIView в качестве свойства inputView UITextView, а затем поворачиваю устройство.
Как мне заставить пользовательский вид клавиатуры занимать только место, занимаемое обычной клавиатурой, когда я поворачиваю устройство?
Ответ №1:
Из документов Apple:
У вас есть большая гибкость в определении размера и содержимого входного представления или вспомогательного представления ввода. Хотя высота этих представлений может быть какой угодно, они должны быть той же ширины, что и системная клавиатура. Если UIKit обнаруживает вид ввода со значением UIViewAutoresizingFlexibleHeight в маске автоматического изменения размера, он изменяет высоту в соответствии с клавиатурой.
Ответ №2:
autoresizingMask
Это UIViewAutoresizingNone
по умолчанию, если я помню. Вы autoresizingMask
должны быть UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin
.
Комментарии:
1. Это тоже не работает — представление по-прежнему занимает весь экран, как только я поворачиваю.
2. Я собираюсь создать тестовое приложение, чтобы посмотреть, смогу ли я просто воспроизвести эту проблему.
3. Что ж, ваш код отлично работает в моем простом тестовом приложении, так что, я думаю, у меня есть какая-то другая проблема. Я ненавижу наследовать приложения других людей.
Ответ №3:
У меня была эта проблема. Способ исправить это:
-
Откройте файл viewcontroller .m клавиатуры
-
Найдите
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
метод -
Заставьте его возвращать NO.
Я предполагаю, что представление выполняло двойной поворот.
Ответ №4:
Сделайте ваши inputViews автоматически изменяющейся маской = UIViewAutoresizingNone; Игра с разными значениями маски автоматического изменения (в зависимости от версии) должна помочь.
Вот некоторые детали, которые я разработал некоторое время назад для iPad (возможно, это поможет вам):
- Если вид ввода является видом выбора, по умолчанию выполняется автоматическое изменение размера, что означает, что для рамки установлен требуемый прямоугольник. Есть небольшое расхождение в том, как это делается в разных целях / версиях для iPad:
autoresizemask
должно быть, по крайней мере,autoresizeflexiblewidth
во всех целевых объектах.- Для Rect установлено значение
default(initial)
height, еслиautoresizeflexibleheight
не включено в iPad3.2 - Для параметра Rect установлены неправильные координаты (x, y), если
autoresizeflexibleheight
он установлен в iPad4, не используйтеautoresizeflexibleheight
маску для выбора.
- Если
inputview
это не режим выбора, егоautoresizemasks
дляflexibleheight
следует отключить.
Комментарии:
1. Это заставляет его сразу занимать весь экран, чего я не хочу.