Проблема с поворотом пользовательского inputView для UITextView

#iphone #ios #uitextview #inputview

#iPhone #iOS #uitextview #inputview

Вопрос:

Я написал пользовательский вид ввода, который предназначен для замены стандартной клавиатуры для UITextView . Если я назначу свой пользовательский UIView как свой UITextView inputView , он будет работать должным образом как в портретном, так и в альбомном режиме.

Проблема возникает, когда я поворачиваю устройство — всякий раз, когда я делаю это, мой пользовательский UIView расширяется, заполняя весь экран, вместо того, чтобы просто закрывать клавиатуру. У меня нигде нет пользовательского кода изменения размера для этого — я буквально просто назначаю UIView в качестве свойства inputView UITextView, а затем поворачиваю устройство.

Как мне заставить пользовательский вид клавиатуры занимать только место, занимаемое обычной клавиатурой, когда я поворачиваю устройство?

Ответ №1:

Из документов Apple:

У вас есть большая гибкость в определении размера и содержимого входного представления или вспомогательного представления ввода. Хотя высота этих представлений может быть какой угодно, они должны быть той же ширины, что и системная клавиатура. Если UIKit обнаруживает вид ввода со значением UIViewAutoresizingFlexibleHeight в маске автоматического изменения размера, он изменяет высоту в соответствии с клавиатурой.

http://developer.apple.com/library/ios/#Documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html#//apple_ref/doc/uid/TP40009542-CH12-SW1

Ответ №2:

autoresizingMask Это UIViewAutoresizingNone по умолчанию, если я помню. Вы autoresizingMask должны быть UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin .

Комментарии:

1. Это тоже не работает — представление по-прежнему занимает весь экран, как только я поворачиваю.

2. Я собираюсь создать тестовое приложение, чтобы посмотреть, смогу ли я просто воспроизвести эту проблему.

3. Что ж, ваш код отлично работает в моем простом тестовом приложении, так что, я думаю, у меня есть какая-то другая проблема. Я ненавижу наследовать приложения других людей.

Ответ №3:

У меня была эта проблема. Способ исправить это:

  1. Откройте файл viewcontroller .m клавиатуры

  2. Найдите - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation метод

  3. Заставьте его возвращать NO.

Я предполагаю, что представление выполняло двойной поворот.

Ответ №4:

Сделайте ваши inputViews автоматически изменяющейся маской = UIViewAutoresizingNone; Игра с разными значениями маски автоматического изменения (в зависимости от версии) должна помочь.

Вот некоторые детали, которые я разработал некоторое время назад для iPad (возможно, это поможет вам):

  1. Если вид ввода является видом выбора, по умолчанию выполняется автоматическое изменение размера, что означает, что для рамки установлен требуемый прямоугольник. Есть небольшое расхождение в том, как это делается в разных целях / версиях для iPad:
    1. autoresizemask должно быть, по крайней мере, autoresizeflexiblewidth во всех целевых объектах.
    2. Для Rect установлено значение default(initial) height, если autoresizeflexibleheight не включено в iPad3.2
    3. Для параметра Rect установлены неправильные координаты (x, y), если autoresizeflexibleheight он установлен в iPad4, не используйте autoresizeflexibleheight маску для выбора.
  2. Если inputview это не режим выбора, его autoresizemasks для flexibleheight следует отключить.

Комментарии:

1. Это заставляет его сразу занимать весь экран, чего я не хочу.