UIScrollView прокручивается вниз при изменении текста UITextField

Как сейчас настроено, у меня есть два UITextViews внутри UIScrollView. Дело в том, что сами UITextViews не прокручиваются, они просто увеличиваются (их размер содержимого) по мере добавления большего количества текста. UIScrollView обрабатывает всю прокрутку вверх и вниз в представлении независимо от того, сколько в нем текста (подумайте, как в Mail.app, где представление темы находится над представлением сообщения и т. д.). Тем не менее, я столкнулся с проблемой сейчас. Когда я программно добавляю текст в свой UITextView (в этом коде bodyText), UIScrollView по какой-то причине автоматически прокручивается вниз.

Чтобы добавить текст, я просто делаю:

NSRange selectedRange = [bodyText selectedRange];
NSString *selectedText = [bodyText.text substringWithRange:selectedRange];
bodyText.text = [bodyText.text stringByReplacingCharactersInRange:selectedRange withString:[NSString stringWithFormat:@"<b>%@</b>", selectedText]];

Так, например, если бы у меня было 2000 пикселей по вертикали текста, и в настоящее время я прокручивал до позиции 400, а затем добавлял текст где-то там, UIScrollView затем опускался бы до 2000.

Я пытался остановить это с помощью подкласса UISCrollView и переопределения -setContentOffset, но тогда это замораживает всю прокрутку.

Мой вопрос: почему он прокручивается до конца? Текст добавляется, когда пользователь нажимает кнопку где-то еще на экране, и прокрутка не имеет ничего общего с перетаскиванием пальца или чем-то еще.


person joshholat    schedule 19.02.2011    source источник


Ответы (1)


В Руководстве по программированию Scroll View вы получаете:

Отображение прямоугольника

Также можно прокрутить прямоугольную область так, чтобы она была видна. Это особенно полезно, когда приложению необходимо отобразить элемент управления, который в данный момент находится за пределами видимой области, в видимое представление. Метод scrollRectToVisible:animated: прокручивает указанный прямоугольник так, чтобы он был виден внутри прокрутки. Если анимированный параметр имеет значение YES, прямоугольник прокручивается в поле зрения с постоянной скоростью. Как и в случае с setContentOffset:animated:, если анимация отключена, делегату отправляется одно сообщение scrollViewDidScroll:. Если анимация включена, делегату отправляется серия сообщений scrollViewDidScroll: по мере выполнения анимации. В случае scrollRectToVisible:animated: свойства отслеживания и перетаскивания прокрутки также НЕТ.

Если анимация включена для scrollRectToVisible:animated:, делегат получает сообщение scrollViewDidEndScrollingAnimation: с уведомлением о том, что представление прокрутки прибыло в указанное место и анимация завершена.

Так что, возможно, вы можете использовать эту функцию, чтобы заблокировать видимость вашего UITextView.

person 3lvis    schedule 19.05.2011