Изменение размера UIView, чтобы UIScrollView работал - PullRequest
0 голосов
/ 15 января 2012

У меня есть небольшая форма, которую я построил в основном в конструкторе интерфейсов:

enter image description here

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

enter image description here

Я добился этого с помощью очень небольшого кода. Все элементы управления моей формы находятся внутри UIScrollView, который отключен и имеет размер 0x0 (по умолчанию) при загрузке. Когда я обнаруживаю присутствие клавиатуры, я включаю ее и изменяю ее размеры до ширины видов и высоты вида + размер клавиатуры . Затем я отключаю и изменяю размер прокрутки при удалении клавиатуры (я установил обратно 0x0).

Это работает почти идеально. За одним исключением (пока):

Область прокрутки (точнее, вид внутри нее) слишком высокая. Поскольку форма без клавиатуры не занимает весь экран, я нахожу, что могу прокрутить до конца моего вида (один полноэкранный режим) + высоту клавиатуры, когда я действительно хочу прокрутить до содержимого представления. + высота клавиатуры.

Я подумал, что мог бы просто сделать представление короче, чтобы оно соответствовало размеру содержимого, но конструктор интерфейса (xcode 4.2), похоже, заставляет его занимать весь экран. Попытка сделать это в коде также не работает, потому что, по-видимому, self.view.frame.size не может быть назначен. Как мне достичь того, что я ищу? В частности, когда клавиатура присутствует, я хочу, чтобы прокручиваемая область в верхней половине экрана имела такой размер, чтобы внизу не было так много провисания:

enter image description here

1 Ответ

1 голос
/ 15 января 2012

Во-первых, self.view.frame - это структура с двумя полями, которые сами являются структурами - size и origin.Если вы хотите изменить размер или происхождение, вы должны изменить весь фрейм

self.view.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y, 
    self.view.frame.size.width, <your desired height>);

Во-вторых, какую базу вы используете для создания вашей формы?Это выглядит просто как UITableVIew.Если это так, рассмотрите возможность изменения типа вашего UIViewController на UITableViewController, поскольку он обрабатывает клавиатуру автоматически.

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

...