Как стать автором
Обновить

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

Но только так убивается вся суть iOS7+ дизайна: весь прикол был в том, что это не вся скроллвью смещается наверх. Скроллвью оставалась такой же фулскриновой, и ей лишь добавлялся нижний contentInset. Таким образом при скролле контента он мог заезжать под клавиатуру и быть чуть виден сквозь неё.

Более того, это поведение зашито в UITableViewController и работает из коробки. Если поместить UITextField в ячейку таблички, то даже строчки кода писать не придется – все взлетит, как есть.

Могу ошибаться, но это же поведение зашито и в UIScrollView. UITextView содержит в себе UIScrollView, а значит, что и в нем это поведение должно быть из коробки. Но если его вдруг нет, то лучше вешать contentInset на keyboardLayoutGuide, а не позицию компонента на экране.

Профиты "зашитого" поведения:

  1. Не придется тратить время на написание того, что уже работает.

  2. Не придется писать тесты своих велосипедов.

  3. При последующих изменениях в ядре системы можно быть уверенным, что Apple о нас подумает и добавить поддержку старого кода и поведения.

К сожалению, поведение зашито только в UITableViewController и UICollectionViewController.

Значит, им там и место :)

А больше нигде и не нужно. И все попытки натянуть сову на глобус – неправильны в самой постановке реализации.

Либо пользуемся имеющимися контроллерами, либо создаем свой универсальный... Но мне сложно придумать такой универсальный контроллер, в котором мне бы пришлось добавлять поддержку работы с клавиатурой. Имеющихся двух вполне достаточно для решения проблемы, описанной в статье. Да и любой другой проблемы с клавиатурой.

Я бы так не сказал. Например, если захочется сделать UITextViewController ("полноэкранный" редактор текста), то будет проблема. Можно и другие примеры представить, когда нужна рутовая UIScrollView, в которой есть текстовый инпут.

Исключение, лишь подтверждающее правило?

Наверное да, но просто немного расстраивает факт того, что эта универсальная задача, относящаяся к любым UIScrollView, и даже кое-как имплементированная в изолированном объекте (UIAutoRespondingScrollViewControllerKeyboardSupport), недоступна к использованию в этих "особых" местах.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории