Saya memiliki UIScrollView
yang berisi banyak UIImageView
s, label UIL, dll ... label jauh lebih lama daripada itu UIScrollView
, tetapi ketika saya menjalankan aplikasi, saya tidak bisa mengklik dan gulir ke bawah ...
Mengapa ini bisa terjadi?
Terima kasih
ios
iphone
ipad
uiscrollview
Menandai
sumber
sumber
Jawaban:
Itu selalu baik untuk menunjukkan potongan kode kerja lengkap:
Cepat 4.0
Saya belum menemukan cara untuk mengatur contentSize di IB (pada Xcode 5.0) .
Catatan: Jika Anda menggunakan Autolayout, tempat terbaik untuk meletakkan kode ini ada di dalam
-(void)viewDidLayoutSubviews
metode.sumber
myScrollView.delegate = self
JUGA, jika ini masih tidak berfungsi, jawaban di bawah ini memiliki saran HEBAT (buka xib / StoryBoard Anda dan pastikan "AutoLayout" dinonaktifkan). Pro-Tip: Anda juga dapat memasukkan<UIScrollViewDelegate>
dalam file .h Anda jika Anda ingin melakukan hal-hal seperti gulir secara terprogram UIScrollView Anda.viewDidLayoutSubviews
membuatnya bekerja untuk saya.Jika Anda tidak dapat menggulir tampilan bahkan setelah Anda mengatur contentSize dengan benar, pastikan Anda hapus centang "Gunakan AutoLayout" di Interface Builder -> File Inspector.
sumber
Anda perlu mengatur
contentSize
properti tampilan gulir agar dapat menggulir dengan benar.Jika Anda menggunakan AutoLayout, Anda perlu set
contentSize
diviewDidLayoutSubviews
dalam rangka untuk itu harus diterapkan setelah selesai AutoLayout.Kode dapat terlihat seperti ini:
sumber
contentSize
untuk ukurancontentView
, ukuran scrollView dan contentView tampaknya diset sebagai sama. Tetapi pengaturan tinggicontentSize
nilai lebih tinggi dari tinggicontentView
, itu berhasil.viewDidLayoutSubviews
dapat dipanggil beberapa kali selama siklus hidup sehingga Anda berisiko meningkatkan ketinggian lebih besar dari yang diharapkan.Jawaban di atas benar - untuk membuat scrolling terjadi, perlu untuk mengatur ukuran konten.
Jika Anda menggunakan pembuat antarmuka cara yang rapi untuk melakukannya adalah dengan atribut runtime yang ditentukan pengguna. Misalnya:
sumber
Cobalah untuk mengubah ukuran ukuran konten menjadi angka besar. Saya tidak mengerti mengapa tampilan gulir saya tidak menggulir bahkan ketika ukuran kontennya tampaknya lebih besar dari ukuran kontrol. Saya menemukan bahwa jika ukuran konten lebih kecil dari yang dibutuhkan, itu tidak berfungsi juga.
Alih-alih tahun 2000 Anda bisa memasukkan angka besar Anda sendiri. Dan jika berhasil, itu berarti bahwa ukuran konten Anda tidak cukup besar ketika Anda mengubah ukuran.
Delegasi tidak diperlukan agar tampilan gulir berfungsi.
sumber
Pastikan Anda memiliki properti contentSize dari tampilan gulir diatur ke ukuran yang benar (yaitu, satu yang cukup besar untuk mencakup semua konten Anda.)
sumber
Hapus centang 'Gunakan Autolayout' lakukan trik untuk saya.
Lingkungan: xCode 5.0.2 Storyboards ios7
sumber
Dalam kasus saya, saya harus mengatur
delaysContentTouches
ke true karena objek di dalam scrollView semuanya menangkap peristiwa sentuh dan menangani sendiri daripada membiarkan scrollView sendiri yang menanganinya.sumber
Setel
contentSize
propertiUIScrollview
dalamViewDidLayoutSubviews
metode. Sesuatu seperti inisumber
Gagasan mengapa tampilan gulir tidak menggulir karena Anda mengatur ukuran konten untuk menggulir kurang dari ukuran tampilan gulir, yang salah. Anda harus mengatur ukuran konten lebih besar dari ukuran tampilan gulir Anda untuk menavigasi saat menggulir.
Ide yang sama dengan zooming, Anda mengatur nilai min dan max untuk zooming yang akan diterapkan melalui aksi zooming.
Selamat datang :)
sumber
Satu tambahan kecil, semua di atas adalah alasan sebenarnya mengapa tampilan gulir Anda mungkin tidak menggulir tetapi kadang-kadang tanpa alasan ini bisa menjadi alasan khusus ketika scrollview ditambahkan melalui kode dan bukan IB, Anda mungkin telah menambahkan subview Anda ke tampilan induk dan tidak untuk scrollview ini menyebabkan subview tidak bergulir
dan tetap atur ukuran konten dan lebih besar dari bingkai tampilan orang tua (duhh !!)
sumber
Saya membuatnya bekerja pada percobaan pertama saya. Dengan tata letak otomatis dan segalanya, tidak ada kode tambahan. Kemudian tampilan koleksi menjadi pisang, terhempas pada waktu berjalan, saya tidak dapat menemukan apa yang salah, jadi saya menghapus dan membuatnya kembali (saya menggunakan Xcode 10 Beta 4. Rasanya seperti bug) dan kemudian penggulirannya hilang. Tampilan Koleksi bekerja lagi!
Beberapa jam kemudian .. inilah yang diperbaiki untuk saya. Saya memiliki tata letak berikut:
UIView
Semuanya ada dalam kendala. Area Aman secara otomatis ditentukan oleh sistem. Dalam kasus terburuk, hapus semua kendala untuk tampilan gulir dan konten dan tidak ada IB yang mengatur ulang / membuatnya untuk Anda. Buat mereka secara manual, ini berfungsi.
pada dasarnya konsepnya adalah untuk memiliki Content view fitting Scrollview, yang sesuai dengan Safe Area.
Tetapi karena itu tidak berhasil. Tampilan konten merindukan ketinggian. Saya mencoba semua yang saya bisa dan satu-satunya yang melakukan trik adalah Ketinggian tampilan Konten yang menciptakan tampilan Konten yang menyeret kontrol .. untuk dirinya sendiri . Yang menentukan ketinggian tetap, yang nilainya telah dihitung dari Ukuran pengontrol tampilan (didefinisikan sebagai bentuk bebas, lebih panjang dari tampilan sebenarnya, hingga berisi semua subview saya) dan akhirnya berhasil lagi!
sumber
jika Anda menerima pesan (iOS8 / swift) yang
viewDidLayoutSubviews
tidak ada, gunakan yang berikut ini sebagai gantinyaIni memperbaikinya untuk saya
sumber
Sesuatu yang tidak disebutkan sebelumnya!
Pastikan outlet Anda terhubung dengan benar ke scrollView! Seharusnya lingkaran diisi, tetapi meskipun Anda telah mengisi lingkaran, scrollView mungkin tidak terhubung - jadi periksa dua kali! Arahkan kursor ke atas lingkaran dan lihat apakah scrollview aktual disorot! (Ini adalah kasus bagi saya)
sumber
Banyak waktu kode benar jika Anda telah mengikuti tutorial tetapi apa yang banyak pemula tidak tahu adalah bahwa scrollView TIDAK akan menggulir secara normal melalui simulator. Seharusnya untuk menggulir hanya ketika Anda menekan mousepad dan secara bersamaan gulir. Banyak pengguna XCode / Swift / Obj-C yang berpengalaman sangat terbiasa melakukan hal ini dan mereka tidak tahu bagaimana hal itu dapat diabaikan oleh pemula. Ciao :-)
Kode ini akan berfungsi dengan baik selama Anda melakukan apa yang saya katakan di atas
sumber
Jika tidak ada solusi lain yang berfungsi untuk Anda, periksa kembali apakah tampilan gulir Anda sebenarnya adalah a
UIScrollView
di Interface Builder.Pada beberapa titik dalam beberapa hari terakhir,
UIScrollView
tipe spontan saya berubah menjadi aUIView
, meskipun kelasnya mengatakanUIScrollView
di inspektur. Saya menggunakanXcode 5.1 (5B130a)
.Anda dapat membuat tampilan gulir baru dan menyalin pengukuran, pengaturan, dan batasan dari tampilan lama, atau Anda dapat secara manual mengubah tampilan Anda ke
UIScrollView
dalamxib
file. Saya melakukan perbandingan dan menemukan perbedaan berikut:Asli:
Setelah jenis berubah secara spontan:
Jadi saya mengganti
<view>
garis dengan<scrollView>
garis asli saya .Saya juga mengganti tag penutup tampilan
</view>
dengan</scrollView>
.Pastikan id tetap sama dengan tampilan saat ini, dalam hal ini: id = "qRn-TP-cXd".
Saya juga harus menyiram xib dari cache Xcode dengan menghapus data turunan aplikasi:
Xcode->Window->Organizer->Projects
, pilih proyek Anda, pada baris Data Turunan, klik Hapus ...Atau jika menggunakan perangkat:
Xcode->Window->Organizer->Device
, pilih perangkat Anda-> Aplikasi, pilih aplikasi Anda, klik (-)Sekarang bersihkan proyek, dan hapus aplikasi dari simulator / perangkat:
Xcode->Product->Clean
Simulator/device->press
dan tahanapp->click
tombol (X) untuk menghapusnyaAnda kemudian dapat membangun dan menjalankan aplikasi Anda dan memiliki fungsi gulir lagi.
PS Saya tidak perlu mengatur ukuran konten tampilan gulir
viewDidLayoutSubviews
atau mematikan tata letak otomatis, tetapi YMMV.sumber
Jika Anda
scrollView
adalah subview daricontainerView
jenis tertentu, maka pastikan bahwa AndascrollView
berada dalam bingkai atau batas daricontainerView
. Saya memilikicontainerView.clipsToBounds = NO
yang masih memungkinkan saya melihat scrollView, tetapi karenascrollView
tidak dalam batascontainerView
itu tidak akan mendeteksi acara sentuh.Sebagai contoh:
Anda akan dapat melihat scrollView tetapi tidak akan menerima interaksi pengguna.
sumber
menambahkan kode berikut ini
viewDidLayoutSubviews
berfungsi untuk saya dengan Autolayout. Setelah mencoba semua jawaban:sumber
Tambahkan
UIScrollViewDelegate
dan tambahkan kode berikut keviewDidAppear
metode yang diperbaiki untuk saya.sumber
Masalah saya diselesaikan oleh:
Setelah saya menghapus batasan atas dan / atau bawah yang terikat pada area aman dan / atau superview, tampilan di dalam scrollView dapat menggulir lagi dan tidak tetap terpaku pada bagian atas layar!
Semoga ini menghentikan orang lain dari berjam-jam kesakitan dengan masalah khusus ini.
sumber
kasus menyenangkan lainnya:
scrollview.superview.userInteractionEnabled harus benar
Saya menyia-nyiakan 2 + jam mengejar ini hanya untuk mengetahui induknya adalah UIImageView yang, secara alami, memiliki userInteractionEnabled == false
sumber
Setelah gagal dengan jawaban yang disediakan di utas ini, saya menemukan artikel ini dengan solusinya.
Ada dua hal yang tidak intuitif tentang pengaturan scrollview dengan autolayout:
Ini adalah inti dari artikel itu. Untuk penjelasan lengkap, termasuk ilustrasi, lihatlah.
sumber
Saya menemukan bahwa dengan masalah AutoLayout ini ... jika saya hanya
ViewController
menggunakanUIView
bukanUIScrollView
untuk kelas ... maka tambahkan sajaUIScrollView
sendiri ... bahwa itu berfungsi.sumber
Saya memiliki masalah yang sama di IB.
Setelah mengatur leading, trailing, atas dan bawah scrollView ke superView. Saya membuat perubahan berikut untuk membuat containerView dapat digulir, yang berfungsi.
Untuk membuat scrollView hanya gulir pada arah horizontal, buat batasan dengan scrollView centerY = ContainerView's centerY
dan untuk membuatnya dapat digulirkan secara vertikal, buat scrollView's centerX = ContainerView's centerX
sumber