UITableView + Üstte içerik ofseti ekle


86

UITableView'umun üstüne içerik alanının boyutunu etkilemeyen bir boşluk eklemem gerekiyor. İçeriği aşağı kaydırmak veya boş bir hücre eklemek yapmak istediğim şey DEĞİL. Bunun yerine sadece bir ofset istiyorum.

Nasıl?

Yanıtlar:


289

Seni takip ediyor muyum emin değilim ama sanırım aynı çıkmaz yaşıyorum. Benim durumumda, ekranın üst kısmındaki ADBannerView'a biraz boşluk bırakmalıyım, bu yüzden yaptığım şey, eklediğim viewDidLoad yöntemindeydi:

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

aldığı değerler UIEdgeInsetsMake'dir (üst, sol, alt, sağ).

Alternatif olarak Swift ile aynı:

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

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

1
Üstte bir "yükleme" hücresini göstermemek için buna ihtiyaç duyuldu, hücre işlendiğinde ego ekine geri dönün, reloadData gerçekleştiğinde en üste -50'ye geri dönün. Teşekkürler !
Daniel

23
Kaydırma göstergesini de ayarlamak isteyebilirsiniz: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev

8
Evet, hatta daha iyisi kaydırma göstergesini şu şekilde ayarlayın: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez

5

Tabloya "boş" bir üstbilgi görünümü ekleyebilirsiniz ... bu, tablonun ilk görünümünü bir ofsete sahip olmasını sağlar, ancak kaydırmaya başladığınızda ofset kaybolur. İstediğinden emin değilim.

Kalıcı bir ofsete ihtiyacınız varsa ve zaten bölüm üstbilgilerini kullanmıyorsanız, o zaman bölüm başlıkları için özel görünümler oluşturarak yukarıdakine benzer şekilde öteleme oluşturabilirsiniz, özellikle de yalnızca bir bölümünüz varsa, bu size kalıcı bir öteleme görünümü verebilir .

Aradığınız şey bunlardan biri gibi geliyorsa, örnek kod gönderebilirim.


4

Jigzat'ın cevabını şu şekilde birleştirdim:

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

içinde

- (void)viewDidLoad

yani ilk hücre en üstte değil.


4

Swift 5.1

viewDidLoad'a aşağıdakileri ekleyin

tableView.contentInset.top = 100

Gerçekten de hepsi bu kadar.

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

2

Senin gibi Sesler sarmak istiyorum SİZİN etrafında bir 'Görünüm' UITableView. Eğer bir varsa UITableViewControllerIB UITableViewotomatik olarak ayarlanan olacaktır viewarasında UITableViewController. viewÖzelliği normale değiştirirsiniz UIViewve UITableVieworaya eklersiniz ve ona bir ofset verirsiniz.

--- Düzenle --- Yazımı okudum ve biraz mantıklı olduğunu düşündüm :) Bir oluşturduğunuzda UITableViewControllerbunu alırsınız (sözde kodla):

UITableViewController.view = UITableView

Bu, gerçek tablonun tüm alanı kaplayacağı ve başka görünümler bile ekleyemeyeceğiniz anlamına gelir. Yani değiştirmen gerekiyor

UITableViewController.view = UIView

ve tablonuzu buna ekleyin UIView


0

Bu yanıtı bununla birleştirdim: https://stackoverflow.com/a/9450345/1993937

Tablo Görünümünün içeriğin iç kısmının en üstünde görünmesini sağlamak için, görünüm başlangıçta göründüğünde tableView hafifçe aşağı kaydırılarak üstteki alan kesilmez. (18 en büyük boşluğum)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.