UITableView arka planı temizle


90

İOS 7'nin resmi olarak piyasaya sürülmediğinin farkındayım ve bunu tartışmamalıyız ANCAK bu sorunu çözmeye çalışırken çıldırıyorum. İOS 6'da tablo görünümüm şeffaftı ve harika görünüyordu. İlk kez iOS 7 çalıştırılıyor ve arka plan beyaz.

Tablo backgroundColor, hücre rengi vb. Gibi şeyleri UIColor clearColor'a yapmayı denedim, ancak hiçbir değişiklik yapmadım.

Bu sorun nasıl çözülür?

masa


1
Masayı backgroundViewtemiz tutmaya mı çalıştınız?
Geri Al

Arka plan rengini ayarladığınız kodu gösterebilir misiniz? Peki ya ebeveyn görüşü? Belki tablo görünümü arka planı açıktır, ancak ebeveyn değil mi?
sooper

Aynı şeyi fark ettim, ancak mevcut sürümümü iOS 7.0'a önceden yükleyen aynı uygulamayı yüklediğimde olmadı. Bu sorun xCode5.0'da mı yatıyor?
Totumus Maximus

Yanıtlar:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

CellForRowAtIndexPath içinde

Ayrıca, tablo görünümünüzün gerçekten şeffaf bir arka plana sahip olduğundan emin olun (film şeridinde): görüntü açıklamasını buraya girin


George, bu kodu yöntemin içine ekle - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
Durumlar için, gerçekten selectedBackgroundView'a ihtiyacınız varsa, cellForRowAtIndexPath'e şunu koyabilirsiniz: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] otomatik sürüm]; hatta awakeFromNib'de: self.selectedBackgroundView = ... Not: self.backgroundColor = [UIColor clearColor]; iOS7 altında awakeFromNib'de çalışmaz. Ancak: cell.backgroundColor = [UIColor clearColor]; yalnızca iOS 7.0 için cellForRowAtIndexPath'te düzgün çalışır
2013'te

11
Yalnızca şu satırı eklemeniz gerekir: cell.backgroundColor = [UIColor clearColor];
evya

Bu, charm cell.backgroundColor = [UIColor clearColor] gibi çalışır;
bpolat

Bunu Swift'de nasıl yapmalı?
Qadir Hüseyin

58

Bunu koy:

cell.backgroundColor = [UIColor clearColor];

Bu bölümde:

cellForRowAtIndexPath

1
İOS 6'da, backgroundViewboş bir görünüme ayarlamak yeterlidir , ancak bu ek kod iOS 7 için gereklidir.
Kevin Borders

25

Önce backgroundView'ı nil olarak ayarlamayı deneyin.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Bunun iOS7 ile dokümantasyonda bir değişiklik olup olmadığından veya her zaman orada olup olmadığından ve arka plan rengini etkilemediğinden, ancak UITableView Sınıf Başvurusu başına @ özellik backgroundView olduğundan emin değilim

"Tablo görünümünün arka plan rengini ayarlamak için bu özelliği nil olarak ayarlamalısınız."

düzenleme: düzeltilmiş kod sözdizimi


25

Bu yanıtlandı, ancak birçok yönden yanlış.

Aşağıdaki temsilci yöntemini uygulamanız gerekir:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Düzeltmeyi cellForRowAtIndexPath'e koyamazsınız çünkü bu, hücre oluşturulduktan sonradır ve arka plan temizlenmeye ayarlanmadan önce beyaz bir arka plan yanıp söner (daha yavaş cihazlarda).

Bu temsilci yöntemini kullanın ve sorunlarınız çözülür!


1
Evet. İOS 7 için arka planı temizlemenin yolu budur. Yukarıdaki tüm diğer öneriler işe yaramayabilir.
girish_vr

15

Aslında, hücre arka plan rengini değiştirmek için resmi olarak doğru yer, belgelere göre farklıdır ( UITableViewCell Sınıf Başvurusu ):

Önceden tanımlanmış veya özel bir hücre kullanıyor olsanız da, backgroundView özelliğini kullanarak veya devralınan backgroundColor özelliğini değiştirerek hücrenin arka planını değiştirebilirsiniz. İOS 7'de, hücrelerin varsayılan olarak beyaz bir arka planı vardır; iOS'un önceki sürümlerinde, hücreler çevreleyen tablo görünümünün arka plan rengini devralır. Bir hücrenin arka plan rengini değiştirmek istiyorsanız, bunu tablo görünümü temsilcinizin tableView: willDisplayCell: forRowAtIndexPath: yönteminde yapın.


Bunu deniyorum ama gösterilen ilk hücrelerin hepsinin arka planı beyaz. Kaydırarak yeni hücreler oluşturursam, istediğim şeffaf arka plana sahip olacaklar. Başka ne deneyeceğinizden emin değilim ...
David Dunham

Boşver, bir zamanlama sorunu gibi görünüyor. Çok erken olan awakeFromNib'de bir şeyler yapıyordum.
David Dunham


6

Bu oldukça sinir bozucu bir problem. İşte mevcut çözümüm:

Bunu UITableViewCellalt sınıfınıza ekleyin .

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

Aman Tanrım. Teşekkür ederim. Gecemi kurtardım. Cevabınız kabul edilmiş olmalıydı.
Michal Shatz

5

Bu benim için iOS7 + 'da çalıştı:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

ve sonra cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];

4

bu kod parçacığını deneyin

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

4

Bu sadece her hücre için net bir arka plan rengi ve tablonun kendisi için net bir renk düzenlediğimde işe yaradı. HER İKİSİ PROGRAMLAMAL OLARAK

tablonun net rengini ayarlamak için:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

hücrelerin rengini ayarlamak için:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

Güzel bir şey. UITable'ın varsayılan rengi beyaz görünüyor (nedenini bilmiyorum)

Arka plan beyaz

Ama bunu değiştirsen iyi olur.


Mükemmel! Eksik barış buydu. Ek kod satırına gerek yok!
Morpheus78

3

İlk set

tableView.backgroundColor = [UIColor clearColor];

İkinci set

tableCell.backgroundColor = [UIColor clearColor];

3

tablo görünümü için IB Çıkışı oluşturun @IBOutlet zayıf var yourTable: UITableView!

görünümde yük

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

Hücrenin rengini temizlemek istiyorsanız, bunu şurada da yapın:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

Benim uygulamasında, ben ayarlamak zorunda backgroundColorbenim üzerinde UITableViewCellsınıfın [UIColor clearColor]ı için güncellenmiş zaman renk iOS 7.


2

Deneyin

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

Ve

cell.backgroundColor = [UIColor clearColor];

2

Benim durumumda hücre bir xib kullanılarak oluşturuldu. Görünüşe göre xcode5'teki arabirim oluşturucu, clearColor'u cell.backgroundColor'a ayarlamada sorun yaşıyor.

Yapmam gereken tek şey gerçekten ayarlamaktı

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

kontrol geçersiz olmayan işlevin sonuna ulaştı
ropo


2

hızlı 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Ayarlamak

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

bu işe yaramazsa şunu deneyin:

tableView.backgroundView = nil;

0

Hızlı 3'te

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
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.