У меня есть 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 пытается исправить другое.Они не придумали совершенно одинаковое решение.