Bagaimana cara membuat gulir UIScrollView ke atas?
ios
objective-c
iphone
uiscrollview
uikit
Jack Humphries
sumber
sumber
UIScrollView
contentInset
, sayangnya.[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
melakukan pekerjaan untuk saya[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Ini bekerja di iOS 6 & 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Berikut ini adalah ekstensi Swift yang membuatnya mudah:
Pemakaian:
sumber
iOS 11 ke atas
cobalah bekerja dengan yang baru
adjustedContentInset
.Misalnya (gulir ke atas):
sumber
Untuk Swift 4
sumber
Menggunakan
setContentOffset:animated:
sumber
Jawaban untuk Swift 2.0 / 3.0 / 4.0 dan iOS 7+:
sumber
Di iOS7 saya kesulitan mendapatkan scrollview tertentu untuk pergi ke atas, yang berfungsi di iOS6, dan menggunakan ini untuk mengatur scrollview untuk pergi ke atas.
sumber
Jawaban rob mayoff versi Swift 3.0.1 :
sumber
Untuk sepenuhnya mereplikasi bilah status perilaku scrollToTop kita tidak hanya harus mengatur contentOffset tetapi juga ingin memastikan scrollindikator ditampilkan. Kalau tidak, pengguna dapat dengan cepat tersesat.
Satu-satunya metode publik untuk mencapai ini adalah
flashScrollIndicators
. Sayangnya, memanggilnya sekali setelah mengatur contentOffset tidak berpengaruh karena segera direset. Saya menemukan ini berfungsi ketika melakukan flash setiap kali masukscrollViewDidScroll:
.Dalam UIScrollViewDelegate Anda (atau UITable / UICollectionViewDelegate) terapkan ini:
Sembunyikan penundaan agak lebih pendek dibandingkan dengan status bar perilaku scrollToTop tetapi masih terlihat bagus.
Perhatikan bahwa saya menyalahgunakan tag tampilan untuk mengomunikasikan keadaan "isScrollingToTop" karena saya memerlukan ini di seluruh pengontrol tampilan. Jika Anda menggunakan tag untuk hal lain, Anda mungkin ingin menggantinya dengan iVar atau properti.
sumber
Saya rasa saya punya jawaban yang harus sepenuhnya kompatibel dengan iOS 11 serta versi sebelumnya (untuk pengguliran vertikal)
Ini memperhitungkan baru adjustedContentInset dan juga menyumbang tambahan offset yang diperlukan bila prefersLargeTitles diaktifkan pada navigationbar yang tampaknya memerlukan 52px ekstra mengimbangi di atas apa pun defaultnya adalah
Ini sedikit rumit karena perubahan CustomizedContentInset tergantung pada status titleBar (judul besar vs judul kecil) jadi saya perlu memeriksa dan melihat apa ketinggian titleBar dan tidak menerapkan offset 52px jika sudah dalam keadaan besar. Tidak dapat menemukan metode lain untuk memeriksa keadaan navigasiBar jadi jika ada yang memiliki opsi yang lebih baik daripada melihat apakah tingginya> 44,0 Saya ingin mendengarnya
Terinspirasi oleh solusi Jakub
sumber
Ini sangat umum ketika bilah navigasi Anda tumpang tindih dengan sebagian kecil konten scrollView dan sepertinya konten dimulai bukan dari atas. Untuk memperbaikinya saya melakukan 2 hal:
sumber
Gulir ke atas untuk
UITableViewController
,UICollectionViewController
atau yangUIViewController
memilikiUIScrollView
sumber
Di SWIFT 5 Cukup atur konten Offset ke nol
sumber
Saya mencoba semua cara. Tetapi tidak ada yang berhasil untuk saya. Akhirnya saya suka ini.
Saya menambahkan
self.view .addSubview(self.scroll)
baris kode di viewDidLoad. Setelah mulai mengatur bingkai untuk tampilan gulir dan menambahkan komponen untuk tampilan gulir.Ini berhasil untuk saya.
Pastikan Anda menambahkan
self.view .addSubview(self.scroll)
baris di awal. maka Anda dapat menambahkan elemen UI.sumber