Проблема с поворотом пользовательского inputView для UITextView - PullRequest
0 голосов
/ 09 июня 2011

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

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

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

Ответы [ 4 ]

5 голосов
/ 12 октября 2012

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

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

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

2 голосов
/ 09 июня 2011

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

2 голосов
/ 02 июля 2011

У меня была эта проблема.Это можно исправить следующим образом:

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

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

  3. Сделайте так, чтобы он возвращал NO.

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

1 голос
/ 09 июня 2011

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

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

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