UIScrollView: прокрутка содержимого после изменения кадра представления ViewController

Вкратце ... я могу прокручивать содержимое, однако я не могу прокрутить вверх, чтобы увидеть «все» содержимое scrollView после изменения фрейма представления ViewController (значение Y кадра Origin Y уменьшается, поэтому представление VC перемещается вверх, чтобы разместить клавиатуру ).

На раскадровке ViewController я добавил UIScrollview и кнопку под ним. Представление прокрутки ограничено его родительским (VC) представлением. Я добавляю contentView в scrollview и ограничиваю его прокруткой и добавляю одинаковые ограничения ширины и высоты между представлением содержимого и родительским представлением scrollviews. Затем я добавляю текстовые поля в contentView и ограничиваю их до contentView. Я вычисляю и устанавливаю размер содержимого scrollView, поэтому я могу прокручивать только содержимое, а не весь contentView. Все идет нормально.

Я регистрируюсь для уведомлений с клавиатуры, и на клавиатуре отображается обработчик. Я уменьшаю значение Y источника представления контроллера представления (через setFrame), которое перемещает представление вверх, так что нижняя часть представления оказывается чуть выше клавиатуры. Также в обработчике keyboardWillShow я увеличиваю размер scrollview на вертикальную высоту клавиатуры, поскольку область scrollView уменьшилась на вертикальную высоту клавиатуры.

Я могу прокручивать содержимое, однако смещение содержимого (0,0) находится посередине содержимого, а дополнительный размер содержимого отображается под содержимым текстовых полей. Я больше не могу прокручивать вверх содержимое.

Я знаю, что scrollView прокручивает свое содержимое, изменяя его границы, поэтому я попытался изменить фрейм scrollview (уменьшить его исходное значение Y), а также попытался сделать то же самое для contentview, однако, когда одно из текстовых полей в contentView становится FirstResponder ИЛИ я просто пытаюсь при прокрутке с помощью мыши содержимое прокручивается вниз, и верхняя половина содержимого не видна и не может быть прокручена до (как упомянуто, смещение содержимого составляет (0,0) на полпути вниз по содержимому и является «верхом содержимого».

Кто-нибудь видит какие-либо вопиющие проблемы с моим подходом к продолжению прокрутки всего содержимого с отображаемой клавиатурой и уменьшением значения Y источника ViewController?


person imobilizer    schedule 10.12.2019    source источник
comment
Я вычисляю и устанавливаю размер содержимого scrollView ... - Не делайте этого. Используйте ограничения, чтобы позволить автоматическому макету справиться со всем этим.   -  person DonMag    schedule 11.12.2019
comment
ContentView ограничен просмотром прокрутки. Отсутствие программной установки setContentSize приводит к тому, что вся область contentView прокручивается, даже если на ней ничего нет. Я уменьшаю размер содержимого так, чтобы прокручивалась только область с текстовыми полями. Он отлично работает, пока я не изменю происхождение представления VC ...   -  person imobilizer    schedule 11.12.2019
comment
Я добавил UIScrollview и кнопку под ним - что делает кнопка? Должен ли он быть спрятан за клавиатурой при отображении?   -  person DonMag    schedule 11.12.2019


Ответы (1)


Мне нужно было добавить contentInsets и scrollIndicatorInsets. Отличная статья здесь ... https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/

person imobilizer    schedule 16.12.2019