UITableView + Tambahkan offset konten di atas

86

Saya perlu menambahkan beberapa ruang kosong ke bagian atas UITableView saya yang tidak memengaruhi ukuran area konten. Menggeser konten ke bawah atau menambahkan sel kosong BUKANLAH yang ingin saya lakukan. Sebaliknya saya hanya ingin offset.

Bagaimana?

bluefloyd8.dll
sumber

Jawaban:

289

Saya tidak yakin apakah saya mengikuti Anda, tetapi saya pikir saya mengalami kesulitan yang sama. Dalam kasus saya, saya harus memberikan beberapa ruang ke ADBannerView di bagian atas layar sehingga yang saya lakukan adalah dalam metode viewDidLoad yang saya tambahkan:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

nilai yang dibutuhkan adalah UIEdgeInsetsMake (atas, kiri, bawah, kanan).

Atau sama dengan Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
jigzat
sumber
1
Membutuhkan ini untuk tidak menampilkan sel "memuat" di atas, beralih kembali ke inset ego saat sel tersebut dirender, kembali ke -50 atas saat reloadData terjadi. terima kasih!
Daniel
23
Anda mungkin ingin menyesuaikan indikator scroll juga: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Ya, atau bahkan lebih baik, sesuaikan indikator scroll seperti ini: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez
5

Anda dapat menambahkan tampilan header "kosong" ke tabel ... ini akan membuat tampilan awal tabel memiliki offset, tetapi setelah Anda mulai menggulir, offset akan hilang. TIDAK yakin itu yang Anda inginkan.

Jika Anda memerlukan offset permanen dan belum menggunakan header bagian, Anda dapat membuat offset seperti di atas dengan membuat tampilan kustom untuk header bagian, terutama jika Anda hanya memiliki satu bagian, ini bisa memberi Anda tampilan offset permanen .

Saya dapat memposting kode contoh jika sepertinya salah satu dari itu yang Anda cari.

scottbates22
sumber
4

Saya menggabungkan jawaban Jigzat dengan:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

di

- (void)viewDidLoad

jadi sel pertama tidak ada di atas.

kaya
sumber
4

Swift 5.1.0

tambahkan yang berikut ini di viewDidLoad

tableView.contentInset.top = 100

Sungguh hanya itu saja.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
sumber
2

Kedengarannya seperti Anda ingin membungkus 'View' di sekitar Anda UITableView. Jika Anda memiliki a UITableViewControllerdi IB, maka UITableViewakan secara otomatis disetel ke viewdari UITableViewController. Anda mengubah viewproperti menjadi normal UIViewdan menambahkan properti Anda UITableViewdi sana dan memberikan offset.

--- Edit --- Saya baru saja membaca posting saya dan berpikir itu tidak masuk akal :) Ketika Anda membuat, UITableViewControllerAnda mendapatkan ini (dalam kode pseudo):

UITableViewController.view = UITableView

Ini berarti tabel sebenarnya akan menggunakan seluruh ruang dan Anda bahkan tidak dapat menambahkan tampilan lain. Jadi, Anda perlu mengubah file

UITableViewController.view = UIView

dan tambahkan tabel Anda ke situ UIView

willcodejavaforfood
sumber
0

Saya menggabungkan jawaban ini dengan yang ini: https://stackoverflow.com/a/9450345/1993937

Untuk membuat tableView muncul di bagian atas inset konten, sehingga ruang di bagian atas tidak terpotong dengan menggulir tableView sedikit ke bawah saat tampilan pertama kali muncul. (18 adalah celah teratas saya)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
TheJeff
sumber