Oke, saya mengalami masalah dengan UITextView
. Inilah masalahnya:
Saya menambahkan beberapa teks ke UITextView
. Pengguna kemudian mengklik dua kali untuk memilih sesuatu. Saya kemudian mengubah teks di UITextView
(secara programatik seperti di atas) dan UITextView
gulungan ke bagian bawah halaman di mana ada kursor.
Namun, itu BUKAN saat pengguna mengklik. Itu SELALU menggulir ke bawah UITextView
terlepas dari mana pengguna mengklik.
Jadi, inilah pertanyaan saya: Bagaimana cara memaksa UITextView
untuk menggulir ke atas setiap kali saya mengubah teks? Saya sudah mencoba contentOffset
dan scrollRangeToVisible
. Tidak ada yang berhasil.
Setiap saran akan dihargai.
iphone
ios
uitextview
Sam Stewart
sumber
sumber
viewDidAppear()
.Jika seseorang memiliki masalah ini di iOS 8, saya menemukan bahwa hanya pengaturan
UITextView's
properti teks, kemudian memanggilscrollRangeToVisible
denganNSRange
denganlocation:0
,length:0
, bekerja. Tampilan teks saya tidak dapat diedit, dan saya menguji keduanya dapat dipilih dan tidak dapat dipilih (tidak ada pengaturan yang memengaruhi hasil). Berikut contoh Swift:sumber
Dan inilah solusiku ...
sumber
Panggilan
berfungsi tetapi panggil
sumber
Saya menggunakan atributedString dalam HTML dengan tampilan teks tidak dapat diedit. Mengatur offset konten juga tidak berhasil untuk saya. Ini berhasil untuk saya: nonaktifkan gulir diaktifkan, atur teks, lalu aktifkan pengguliran lagi
sumber
viewDidAppear
sebagai bagian dari perbaikan serius yang lebih luasKarena tidak ada solusi ini yang berhasil untuk saya dan saya membuang terlalu banyak waktu untuk mengumpulkan solusi, ini akhirnya menyelesaikannya untuk saya.
Ini benar-benar konyol bahwa ini bukan perilaku default untuk kontrol ini.
Saya harap ini membantu orang lain.
sumber
self.textView.contentOffset.y
berdasarkan jawaban ini: stackoverflow.com/a/25366126/1736679Saya tidak yakin apakah saya memahami pertanyaan Anda, tetapi apakah Anda hanya mencoba menggulir tampilan ke atas? Jika demikian, Anda harus melakukannya
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
sumber
Untuk iOS 10 dan Swift 3 saya melakukan:
Berhasil untuk saya, tidak yakin apakah Anda mengalami masalah dengan versi terbaru Swift dan iOS.
sumber
Saya memiliki jawaban yang diperbarui yang akan membuat tampilan teks muncul dengan benar, dan tanpa pengguna mengalami animasi gulir.
sumber
Ini adalah cara kerjanya di iOS 9 Release sehingga textView digulir ke atas sebelum muncul di layar
sumber
Begitulah cara saya melakukannya
Cepat 4:
sumber
Ini berhasil untuk saya
sumber
DispatchQueue.main.async(...
tidak diperlukan, tetapi untuk beberapa alasan, pada (mis.) IPhone 5s (iOS 12.1) itu tidak berfungsi kecuali Anda mengirim. Tetapi seperti yang dilaporkan oleh tumpukan panggilan pada debugger,viewWillAppear()
sudah berjalan di antrian utama dalam semua kasus ... - WTF, Apple ???Coba ini untuk memindahkan kursor ke atas teks.
Lihat bagaimana kelanjutannya. Pastikan Anda memanggil ini setelah semua acara Anda dipecat atau apa pun yang Anda lakukan selesai.
sumber
Masalah saya adalah menyetel textView ke gulir ke atas saat tampilan muncul. Untuk iOS 10.3.2, dan Swift 3.
Solusi 1:
Solusi 2:
sumber
Menggabungkan jawaban sebelumnya, sekarang seharusnya berfungsi:
sumber
scrollRangeToVisible
.Baris kode ini bekerja untuk saya.
sumber
Anda hanya dapat menggunakan kode ini
sumber
Swift 2 Jawaban:
Ini mencegah textView bergulir ke akhir teks setelah menyetelnya.
sumber
Di Swift 3:
viewWillLayoutSubviews adalah tempat untuk membuat perubahan. viewWillAppear seharusnya berfungsi juga, tetapi secara logis, tata letak harus dilakukan di viewWillLayoutSubviews .
Terkait metode, scrollRangeToVisible dan setContentOffset akan berfungsi. Namun, setContentOffset memungkinkan animasi mati atau hidup.
Asumsikan UITextView dinamai sebagai yourUITextView . Berikut kodenya:
sumber
Saya harus memanggil dalam viewDidLayoutSubviews (memanggil di dalam viewDidLoad terlalu dini):
sumber
Ini berhasil untuk saya. Ini didasarkan pada jawaban RyanTCB tetapi merupakan varian Objective-C dari solusi yang sama:
sumber
sumber
ViewWillappear
akan melakukannya secara instan sebelum pengguna dapat menyadarinya, tetapiViewDidDisappear
bagian akan menghidupkannya dengan malas.[mytextView setContentOffset:CGPointZero animated:YES];
kadang-kadang TIDAK berfungsi (saya tidak tahu mengapa), jadi gunakan scrollrangetovisible.sumber
Masalah terpecahkan: iOS = 10.2 Swift 3 UITextView
Saya baru saja menggunakan baris berikut:
sumber
viewDidLayoutSubviews
sehingga terjadi saat layar berputar. Jika tidak, offset konten menjadi tidak sejajar.sumber
Saya punya masalah, tetapi dalam kasus saya textview adalah subview dari beberapa tampilan kustom dan menambahkannya ke ViewController. Tidak ada solusi yang berhasil untuk saya. Untuk mengatasi masalah menambahkan penundaan 0,1 detik dan kemudian mengaktifkan gulir. Itu berhasil untuk saya.
sumber
Bagi saya, kode ini berfungsi dengan baik:
Untuk menggulir ke posisi yang tepat dan menampilkannya di atas layar saya menggunakan kode ini:
Mengatur contentOffset.y menggulir ke akhir teks, lalu scrollRangeToVisible menggulir ke atas ke nilai scrollToLocation. Dengan demikian, posisi yang dibutuhkan muncul di baris pertama scrollView.
sumber
Bagi saya di iOS 9 itu berhenti bekerja untuk saya dengan string yang dikaitkan dengan metode scrollRangeToVisible (baris 1 dengan font tebal, baris lain dengan font biasa)
Jadi saya harus menggunakan:
dimana penundaan adalah:
sumber
Coba gunakan solusi 2 baris ini:
sumber
Ini kode saya. Ini bekerja dengan baik.
sumber