Хорошо, у меня проблема с файлом UITextView
. Вот в чем проблема:
Я добавляю текст в файл UITextView
. Затем пользователь дважды щелкает, чтобы выбрать что-нибудь. Затем я изменяю текст в UITextView
(программно, как указано выше), и UITextView
прокручиваю до конца страницы, где есть курсор.
Однако это НЕ то место, где пользователь щелкнул. Он ВСЕГДА прокручивается до конца UITextView
независимо от того, где щелкнул пользователь.
Итак, вот мой вопрос: как заставить UITextView
прокрутку вверх каждый раз, когда я меняю текст? Я пробовал contentOffset
и scrollRangeToVisible
. Ни работать.
Мы ценим любые предложения.
iphone
ios
uitextview
Сэм Стюарт
источник
источник
viewDidAppear()
.Если кто имеет эту проблему прошивки 8, я обнаружил , что просто установив
UITextView's
свойство текста, то вызовscrollRangeToVisible
сNSRange
сlocation:0
,length:0
работал. Мое текстовое представление было недоступно для редактирования, и я протестировал как возможность выбора, так и отсутствие возможности выбора (ни один параметр не повлиял на результат). Вот пример Swift:источник
И вот мое решение ...
источник
Вызов
работает, но позвони
источник
Я использовал attributedString в HTML с недоступным для редактирования текстовым представлением. Установка смещения контента у меня тоже не сработала. Это сработало для меня: отключите прокрутку, установите текст, а затем снова включите прокрутку
источник
viewDidAppear
как часть более широкого серьезного исправленияПоскольку ни одно из этих решений у меня не сработало, и я потратил слишком много времени, собирая решения по кусочкам, это наконец решило проблему для меня.
Это действительно глупо, что это не поведение по умолчанию для этого элемента управления.
Надеюсь, это поможет кому-то другому.
источник
self.textView.contentOffset.y
на основе этого ответа: stackoverflow.com/a/25366126/1736679Я не уверен, понял ли я ваш вопрос, но вы пытаетесь просто прокрутить представление наверх? Если да, тебе следует сделать
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
источник
TextView.scrollRectToVisible(CGRect(x: 0,y: 0,width: 1,height: 1), animated: false)
Для iOS 10 и Swift 3 я сделал:
Сработало для меня, не уверен, что у вас проблема с последней версией Swift и iOS.
источник
У меня есть обновленный ответ, в котором текстовое представление будет отображаться правильно и без анимации прокрутки у пользователя.
источник
Вот как это работало в выпуске iOS 9, так как textView прокручивается сверху, прежде чем появится на экране.
источник
Вот как я это сделал
Swift 4:
источник
Это сработало для меня
источник
DispatchQueue.main.async(...
не требуется, но по какой-то причине (например, на iPhone 5s (iOS 12.1)) он не работает, если вы не отправите вызов . Но, как сообщает стек вызовов отладчика, во всех случаяхviewWillAppear()
уже выполняется основная очередь ... - WTF, Apple ???Попробуйте переместить курсор в верхнюю часть текста.
Посмотрите, как это происходит. Убедитесь, что вы вызываете это после того, как все ваши события активированы или все, что вы делаете, будет сделано.
источник
Моя проблема заключается в том, чтобы установить textView для прокрутки вверх при появлении представления. Для iOS 10.3.2 и Swift 3.
Решение 1:
Решение 2:
источник
Объединил предыдущие ответы, теперь он должен работать:
источник
scrollRangeToVisible
.Эта строка кода мне подходит.
источник
просто вы можете использовать этот код
источник
Swift 2 ответ:
Это предотвращает прокрутку textView до конца текста после его установки.
источник
В Swift 3:
viewWillLayoutSubviews - это место для внесения изменений. viewWillAppear также должен работать, но по логике макет должен выполняться в viewWillLayoutSubviews .
Что касается методов, то будут работать как scrollRangeToVisible, так и setContentOffset . Однако setContentOffset позволяет включать или отключать анимацию.
Предположим, что UITextView назван yourUITextView . Вот код:
источник
Мне пришлось вызвать следующее внутри viewDidLayoutSubviews (вызывать внутри viewDidLoad было слишком рано):
источник
Это сработало для меня. Он основан на ответе RyanTCBs, но это вариант того же решения для Objective-C:
источник
источник
ViewWillappear
сделает это мгновенно, прежде чем пользователь заметит, ноViewDidDisappear
раздел будет лениво анимировать.[mytextView setContentOffset:CGPointZero animated:YES];
иногда НЕ работает (я не знаю почему), поэтому лучше используйте scrollrangetovisible.источник
Проблема решена: iOS = 10.2 Swift 3 UITextView
Я просто использовал следующую строку:
источник
viewDidLayoutSubviews
чтобы это происходило при повороте экрана. В противном случае смещение содержимого станет смещенным.источник
У меня была проблема, но в моем случае текстовое представление является подвидом некоторого настраиваемого представления и добавлено его в ViewController. Ни одно решение не помогло мне. Для решения проблемы добавлена задержка 0,1 сек, а затем включена прокрутка. У меня это сработало.
источник
Для меня отлично работает этот код:
Для прокрутки до точного положения и отображения его в верхней части экрана я использую этот код:
Установка contentOffset.y прокручивает до конца текста, а затем scrollRangeToVisible прокручивает до значения scrollToLocation. Таким образом, нужная позиция появляется в первой строке scrollView.
источник
Для меня в iOS 9 он перестал работать для меня с атрибутной строкой с методом scrollRangeToVisible (первая строка была с жирным шрифтом, другие строки были с обычным шрифтом)
Поэтому мне пришлось использовать:
где задержка:
источник
Попробуйте использовать это двухстрочное решение:
источник
Вот мои коды. Работает нормально.
источник