Могу ли я переопределить автоматическое поведение прокрутки для прокрутки до первого респондента?

У меня есть UITextField внутри UIScrollView (несколько уровней в глубину). Я смотрю UIKeyboardDidShowNotification, а также вызываю тот же код, когда я вручную меняю первого респондента (я мог бы переключиться на другое текстовое поле, не скрывая на мгновение клавиатуру.) В этом коде я использую scrollRectToVisible: animated: , чтобы убедиться, что UITextField виден.

У меня была огромная головная боль отладки, почему это было забавно, но теперь я понял, что UIScrollView автоматически гарантирует, что первый респондент находится в пределах его границ. Я меняю фрейм UIScrollView, чтобы ни один из них не был скрыт за клавиатурой. .

Однако мой код может быть немного умнее, чем их код, потому что я хочу показать не только UITextField, но и несколько близлежащих связанных представлений.Я пытаюсь показать эти взгляды, подходят ли они; Если не совсем так, я стараюсь показать их как можно больше, но, по крайней мере, убедиться, что UITextField виден. Поэтому я хочу сохранить свой собственный код.

Автоматическое поведение мешает моему коду. Я вижу прокрутку, которая мягко прокручивается вверх, чтобы был виден нижний край моего контента, а затем он привязывается к тому месту, где мой код указывал ему позицию.

Есть ли способ остановить UIScrollView от выполнения его стандартной возможности прокрутки первого респондента в представление?

Дополнительная информация

При просмотре документации я прочитал, что они советуют изменить contentInset представления прокрутки вместо рамки. Я изменил это и устранил некоторые непредсказуемые действия, но это не помогло решить эту конкретную проблему.

Я не думаю, что публикация всего кода обязательно будет настолько полезной. Но вот критический вызов и значения важных свойств в то время. Я просто напишу 4 кортежа для CGRects; Я имею в виду (x, y, ширина, высота).

[scrollView scrollRectToVisible:(116.2, 71.2, 60, 243) animated:YES];

scrollView.bounds == (0, 12, 320, 361)

scrollView.contentInset == UIEdgeInsetsMake (0, 0, 118, 0)

textField.frame == (112.2, 222.6, 24, 24)

преобразовано в координаты непосредственного подвида scrollView == (134.2, 244.6, 24, 24)

преобразовано в координаты scrollView == (134.2, 244.6, 24, 24)

Итак, прокрутка нижний край вида действительно находится на y == 243 из-за вставки.

Запрошенный прямоугольник простирается до y == 314.2.

Текстовое поле расширяется до y == 268.6.

Оба находятся за пределами поля. scrollRectToVisible пытается исправить одну из этих проблем.Стандартное поведение UIScrollView / UITextField пытается исправить другое. Они не предлагают одно и то же решение.

9
задан morningstar 12 October 2011 в 20:51
поделиться