Bagaimana saya bisa membuat UIScrollView
gulir ke bagian bawah dalam kode saya? Atau dengan cara yang lebih umum, ke suatu titik subview?
298
Bagaimana saya bisa membuat UIScrollView
gulir ke bagian bawah dalam kode saya? Atau dengan cara yang lebih umum, ke suatu titik subview?
Anda dapat menggunakan fungsi UIScrollView setContentOffset:animated:
untuk menggulir ke bagian mana pun dari tampilan konten. Berikut beberapa kode yang akan bergulir ke bawah, dengan anggapan scrollView Anda adalah self.scrollView
:
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
Semoga itu bisa membantu!
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
contentSize
lebih rendah daribounds
. Jadi harus seperti ini:scrollView.setContentOffset(CGPointMake(0, max(scrollView.contentSize.height - scrollView.bounds.size.height, 0) ), animated: true)
let bottomOffsetY = max(collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom, 0)
Versi cepat dari jawaban yang diterima untuk menempelkan salinan dengan mudah:
sumber
Solusi paling sederhana:
sumber
Hanya penyempurnaan jawaban yang ada.
Ini menangani inset bagian bawah juga (jika Anda menggunakannya untuk menyesuaikan tampilan gulir saat keyboard terlihat)
sumber
Implementasi cepat:
Gunakan:
sumber
Menyetel konten diimbangi dengan ketinggian ukuran konten salah: ia menggulung bagian bawah konten ke bagian atas tampilan gulir, dan karenanya tidak terlihat.
Solusi yang benar adalah dengan menggulir bagian bawah konten ke bagian bawah tampilan gulir, seperti ini (
sv
adalah UIScrollView):sumber
if (sv.contentOffset.y + csz.height > bsz.height) {
?setContentOffset:
perintah yang penting.Solusi Swift 2.2, dengan
contentInset
mempertimbangkanIni harus dalam ekstensi
Perhatikan bahwa Anda mungkin ingin memeriksa apakah
bottomOffset.y > 0
sebelum menggulirsumber
Bagaimana jika
contentSize
lebih rendah daribounds
?Untuk Swift adalah:
sumber
Gulir ke Atas
Gulir ke Bawah
sumber
Saya juga menemukan cara lain yang bermanfaat untuk melakukan ini jika Anda menggunakan UITableview (yang merupakan subkelas dari UIScrollView):
sumber
Menggunakan
setContentOffset:animated:
fungsi UIScrollView untuk menggulir ke bawah di Swift.sumber
Sepertinya semua jawaban di sini tidak mempertimbangkan area aman. Sejak iOS 11, iPhone X telah memperkenalkan area yang aman. Ini mungkin memengaruhi scrollView
contentInset
.Untuk iOS 11 dan di atasnya, untuk menggulir ke bawah dengan benar dengan memasukkan inset konten. Anda harus menggunakan
adjustedContentInset
bukancontentInset
. Periksa kode ini:contentOffset.x
):Referensi:
sumber
Dengan (opsional)
footerView
dancontentInset
, solusinya adalah:sumber
Cepat:
Anda dapat menggunakan ekstensi seperti ini:
Menggunakan:
sumber
valdyr, harap ini akan membantu Anda:
sumber
Kategori untuk penyelamatan!
Tambahkan ini ke tajuk utilitas bersama di suatu tempat:
Dan kemudian untuk implementasi utilitas:
Kemudian Terapkan di mana pun Anda suka, misalnya:
sumber
Untuk ScrollView Horizontal
Jika Anda menyukai saya memiliki Horizontal ScrollView dan ingin menggulir ke akhir itu (dalam kasus saya di sebelah kanan itu), Anda perlu mengubah beberapa bagian dari jawaban yang diterima:
Objektif-C
Cepat
sumber
Jika Anda entah bagaimana mengubah scrollView contentSize (mis. Menambahkan sesuatu ke stackView yang ada di dalam scrollView) Anda harus memanggil
scrollView.layoutIfNeeded()
sebelum menggulir, jika tidak maka tidak akan melakukan apa-apa.Contoh:
sumber
Cara yang baik untuk memastikan bagian bawah konten Anda terlihat adalah dengan menggunakan rumus:
Ini memastikan tepi bawah konten Anda selalu di atau di atas tepi bawah tampilan. Ini
MIN(0, ...)
diperlukan karenaUITableView
(dan mungkinUIScrollView
) memastikancontentOffsetY >= 0
ketika pengguna mencoba menggulir dengan menjentikkannyacontentOffsetY = 0
. Ini terlihat sangat aneh bagi pengguna.Kode untuk mengimplementasikan ini adalah:
sumber
Jika Anda tidak membutuhkan animasi, ini berfungsi:
sumber
Sementara
Matt
solusi tampaknya benar bagi saya, Anda perlu mempertimbangkan juga inset tampilan koleksi jika ada satu yang telah diatur.Kode yang diadaptasi adalah:
sumber
Dengan cepat:
sumber
Solusi untuk menggulir ke item terakhir dari tabel Lihat:
Swift 3:
sumber
Tidak bekerja untuk saya, ketika saya mencoba untuk menggunakannya di
UITableViewController
atasself.tableView
(iOS 4.1)
, setelah menambahkanfooterView
. Itu bergulir keluar dari perbatasan, menunjukkan layar hitam.Solusi alternatif:
sumber
sumber
Saya menemukan bahwa
contentSize
itu tidak benar-benar mencerminkan ukuran sebenarnya dari teks, jadi ketika mencoba untuk menggulir ke bawah, itu akan menjadi sedikit tidak aktif. Cara terbaik untuk menentukan ukuran konten sebenarnya adalah dengan menggunakan metodeNSLayoutManager
'susedRectForTextContainer:
:Untuk menentukan berapa banyak teks yang benar-benar ditampilkan di
UITextView
, Anda dapat menghitungnya dengan mengurangi insets wadah teks dari ketinggian bingkai.Maka menjadi mudah untuk menggulir:
Beberapa angka untuk referensi tentang apa ukuran yang berbeda mewakili untuk kosong
UITextView
.sumber
Perluas UIScrollView untuk menambahkan metode scrollToBottom:
sumber
Versi Xamarin.iOS dari jawaban yang diterima
sumber
Versi Xamarin.iOS untuk
UICollectionView
jawaban yang diterima untuk kemudahan dalam menyalin dan menempelsumber