Apakah sel-sel UITableView
acara di ruang kosong ketika Anda gulir ke bawah?
Jika demikian, maka masalahnya mungkin inset yang ditambahkan ke UITableView
karena pengontrol Navigasi yang Anda miliki di tampilan Anda. Inset ditambahkan ke tampilan tabel agar konten dapat ditempatkan di bawah bilah navigasi ketika tidak ada gulir yang terjadi. Ketika tabel digulir, konten akan bergulir dan ditampilkan di bawah bilah navigasi transparan. Perilaku ini tentu saja diinginkan hanya jika tampilan tabel dimulai langsung di bawah bilah navigasi, yang tidak terjadi di sini.
Satu hal yang perlu diperhatikan adalah bahwa iOS menyesuaikan inset konten hanya untuk tampilan pertama dalam hierarki tampilan jika itu UIScrollView
turunan atau turunan (misalnya UITableView
dan UICollectionView
). Jika hierarki tampilan Anda mencakup banyak tampilan gulir, automaticallyAdjustsScrollViewInsets
akan membuat penyesuaian hanya untuk yang pertama.
Berikut cara mengubah perilaku ini:
a) Pembuat Antarmuka
Saya tidak yakin versi Xcode mana yang memperkenalkan opsi ini (tidak menemukannya dalam catatan rilis), tetapi setidaknya tersedia dalam versi 5.1.1.
Sunting: Untuk menghindari kebingungan, ini adalah opsi ketiga yang disebutkan dalam komentar
b) Secara terprogram
Tambahkan ini ke yaitu viewDidLoad
(kredit untuk jawaban Slavco Petkovski dan komentar Cris R )
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) Ini mungkin relevan untuk anak sekolah tua
Anda dapat memperbaikinya dengan menambahkan
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Atau jika Anda menggunakan IB dan jika bilah navigasi tidak transparan (tidak dapat membedakan dari tangkapan layar)
- Pilih pengontrol tampilan
- Inspektur Atribut Terbuka
- Di opsi Tampilan Pengendali Perpanjang Tepi bagian hapus centang "Di Bawah Bilah Atas"
Saya memiliki masalah yang sama dan saya cukup yakin saya memiliki UIView di sana pada satu titik. Cukup menyalin seluruh tampilan tabel, menghapusnya, dan menempelkannya lagi untuk saya.
sumber
Pilih tampilan tabel di storyboard Anda dan pastikan gaya diatur ke "Plain", bukan "Dikelompokkan". Anda dapat menemukan pengaturan ini di tab Inspektur atribut.
sumber
Dalam Kasus Saya, saya memiliki label UIL di bawah hierarki tampilan UITableView in view.
Saya memindahkannya "maju" dan ruang kosong muncul. Tidak yakin mengapa tetapi berfungsi seperti ini, jika ada sesuatu di bawah tableView, itu menyembunyikan ruang kosong.
Anda juga dapat mencoba memeriksa / menghapus tanda centang "Sesuaikan Tampilan Gulir Lihat" pada inspektur pengontrol tampilan Anda di storyboard.
sumber
TIDAK ada yang di atas yang membantu saya. tetapi melakukan ini memang membantu :
alih-alih '-64' Anda dapat memasukkan nomor lain tergantung pada ketinggian bilah navigasi Anda.
sumber
Mungkin ada yang ditambahkan sebelumnya
UIRefreshControl
. Saya punya masalah dengan kode seperti ini:Seperti yang Anda lihat, saya atur
self.refreshController
segera setelahnyainit
Tetapi, jika Anda mengatur
refreshControl
setelah pengaturan, maka ruang atas tidak mengganggu Anda.sumber
Jika Anda melakukan ini di iOS 11, secara otomatisAdjustsScrollViewInsets tidak akan berfungsi karena sudah usang, kode berikut ini berfungsi untuk saya sesuai dengan jawaban di posting ini: https://stackoverflow.com/a/44391269/5476481
Semoga ini membantu.
sumber
Di Storyboard, atur
contentInsets
milik Andatableview
ke Neversumber
Saya tidak bisa mengatakan dengan pasti tetapi sepertinya Anda punya UIView tambahan yang terjebak di mana Sel Prototipe dimulai dan bagian atas UITableView. Gambar saya persis seperti milik Anda jika Anda menghapus teks / baris yang saya tambahkan.
sumber
Saya masih tidak yakin apa yang menyebabkan ruang ekstra di bagian atas, tetapi saya menemukan bahwa menghapus UITableView dengan ruang dan menggantinya dengan yang baru mengambil ruang itu.
Saya pasti telah menyeret UIView ke sana secara tidak sengaja, tetapi saya tidak dapat memilihnya sehingga saya tidak dapat menghapusnya.
sumber
Cepat 5
Coba dengan menghapus tableHeaderView dan tableFooterView
sumber
Periksa frame tampilan meja Anda di storyboard atau xib. Milik saya secara default memiliki nilai posisi, maka bug
sumber
Dalam aplikasi saya juga saya pernah mengalami masalah seperti ini. Saya telah menetapkan inset tepi atas tableView nol. Juga mencoba mengatur
false
untukautomaticallyAdjustsScrollViewInsets
. Tetapi tidak berhasil.Akhirnya saya mendapat solusi kerja. Saya tidak tahu apakah ini cara yang benar. Tetapi menerapkan
heightForHeaderInSection
metode delegasi berhasil bagi saya. Anda harus mengembalikan nilai bukan nol untuk mengerjakan ini (return zero akan menampilkan ruang yang sama seperti sebelumnya).sumber
Pada 2017, apa yang bekerja untuk saya hanyalah baris ini
navigationController? .navigationBar.isTranslucent = false
Saya tidak tahu mengapa itu akan memengaruhinya. Mungkin seseorang bisa menjelaskan. Tapi saya cukup yakin ini adalah jawaban yang akan dicari kebanyakan orang.
sumber
Di iOS 11 dan di atasnya, apple telah mengubah properti untuk menyesuaikan inset konten. Gunakan
contentInsetAdjustmentBehavior
dan mengatur.never
untuk menghapus ruang ekstra di atasUICollectionView
,UIScrollView
,UITableView
.Saya harap ini akan membantu Anda.
sumber
Bagi saya masalah terjadi ketika saya menyeret sel prototipe dari menu ke tampilan tabel. Jadi saya menghapus itu dan hanya mengatur sel prototipe ke 1 di properti tampilan tabel inspektur
sumber
Saya melakukan ini secara terprogram, dan saya hanya memindahkan addSubview (tableView) saya ke bawah setelah menambahkan semua subview saya yang lain, dan itu menyelesaikan masalah saya!
Tidak yakin mengapa ini hanya muncul di perangkat dan bukan di simulator saya, tapi setidaknya ada solusi sederhana!
sumber
Selama UITableView bukan subview pertama dari pengontrol tampilan, ruang kosong tidak akan muncul.
Solusi: Tambahkan objek tampilan tersembunyi / jelas (tampilan, label, tombol, dll.) Sebagai subview pertama dari pengontrol tampilan (pada tingkat yang sama dengan UITableView tetapi sebelumnya).
sumber
UIView dapat dimasukkan di bagian atas dan bawah tabel (seret dan lepas). Atur propertinya transparan dan tinggi 1 px. Ini untuk menghilangkan lapisan tambahan di depan sel.
sumber
Saya juga punya masalah ini tableView bukan tampilan terakhir dalam hierarki. Dalam kasus saya, saya memiliki pandangan di atas (meskipun mereka tidak tumpang tindih satu sama lain), jadi saya menyeretnya di atas tableView dalam hierarki dan itu membuatnya.
sumber
Saya baru saja menemukan solusi untuk ini.
Cukup pilih tableview dan klik Editor -> Atur -> Kirim ke Depan
Itu bekerja untuk saya dan berharap itu membantu Anda semua.
sumber
Dalam kasus saya, saya menggunakan ContainerViewController dan meletakkan UITableViewController di dalamnya. Setelah menghapus ContainerViewController. Masalah hilang.
sumber
Bug Xcode 8 ...
Coba ini dulu jika gaya Storyboard UITableView Anda diatur ke Plain.
Setel gaya tabel ke Dikelompokkan lalu kembali ke Plain. Ini menghapus ruang di aplikasi saya di bagian atas UITableView saya.
sumber
Dalam kasus saya, saya menggunakan tampilan kontainer. (Tampilan Utama -> Tampilan Contaner -> UITableView)
Ruang tambahan di bagian atas, saya pikir, seperti ruang bilah notifikasi perangkat (di mana waktu ditampilkan, baterai). Saya benar-benar melakukannya, itu bukan asumsi.
Apa yang saya lakukan adalah dari Pembuat UI:
sumber
Anda dapat menggunakan kode ini ke viewDidLoad atau viewDidAppear tempat meja Anda dibuat:
sumber
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
https://i.stack.imgur.com/vRNfV.pngsumber
atur Tepi Tambahan ViewController di storyboard sehingga
underTopBar
properti tidak dicentang.sumber
Sedang mengalami masalah yang sama. Saya menyelesaikannya dengan menambahkan berikut ini ke viewDidLoad.
sumber
Atur inset konten ke nol:
sumber
cek untuk
sumber