UITableView arka plan rengi iPad'de her zaman gri


128

Ben ayarladığınızda backgroundColoriçin benim UITableViewo iPad simülatörü üzerinde iPhone (cihaz ve simülatör), ancak DEĞİL üzerine cezası çalışır. Bunun yerine, dahil ettiğim herhangi bir renk için açık gri bir arka plan elde ederim groupTableViewBackgroundColor.

Yeniden üretme adımları:

  1. Yeni bir navigasyon tabanlı proje oluşturun.
  2. RootViewController.xib'i açın ve tablo görünümü stilini "Grouped" olarak ayarlayın.
  3. Bu yanıtlayıcıyı RootViewController'a ekleyin:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Simulator SDK 3.2'yi seçin, oluşturun ve çalıştırın.
  5. Siyah bir arka plan elde edeceksiniz (cihaz ve simülatör).
  6. Proje ağacında hedefinizi seçin.
  7. Projeye tıklayın: iPad için Mevcut Hedefi Yükselt.
  8. Oluşturun ve çalıştırın.
  9. Açık gri bir arka plan elde edeceksiniz.
  10. Tablo görünümü stilini Düz'e döndürün ve siyah bir arka plan elde edin.

Yardımınız için teşekkürler!


2
Ah, şimdi iPhone ve iPad iOS6'da tekrar hizalandı :-)
Gerd

3
Nadiren kullanılan "Yeniden üretme adımları" terimlerini kullandığınız için Bravo! :-p
Constantino Tsarouhas

Yanıtlar:


245

Bunlardan birini deneyin.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

3
Yan etkileri var mı bilmiyorum ama işe yarıyor! Teşekkürler! self.tableView.backgroundView = nil;
rjobidon

30
ÇOK ÇOK ÖNEMLİ: Bu yalnızca SDK 3.2 ile çalışır. 3.1.3 ile geriye dönük uyumluluk için. ve daha önce tablo görünümünün backgroundView özelliğine yanıt verip vermediğini kontrol etmeniz gerekir: if ([self.tableView responsesToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; aksi takdirde uygulamanız aniden çökecek ve çıkacaktır, bana güvenebilirsiniz!
rjobidon

1
evet, yukarıdaki çözümü denedim ve benim için çalıştı. Biri bana bu sorunun aslında ne olduğunu söyleyebilir mi? Uygulamayı çalıştırdığımızda neden gri renkte görünüyor?
Naveen

Lütfen birisi bize bu sorunu çözmek için bunun neden gerekli olduğunu söyler mi?
mask8

çünkü açıkça yeni ios bir arka plan görünümü koymanıza izin verir. Neden gri bir görünüme ayarlanması sadece Apple'ın sunduğu bir konudur. çok tuhaf, çok aptal. Ancak iOS için kodlama yaparken her gün tuhaf ve aptalca bir şeyle karşılaşıyorum
The Lazy Coder

30

Bu çözüm için çok teşekkürler. Bunu bir UIViewController'da IBOutlet ile bir UITableView özelliğine uyguladım ve şu şekilde iyi çalışıyor:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

orta satıra ihtiyaç yoktur [panelTable setBackgroundView: [[[UIView tahsis] init] otomatik serbest bırakma]];
NIKHIL

4
Dondurucu Ateş: aslında var. Bu olmadan, tablo hücresi sınırlarında garip çizim kalıntıları elde edersiniz.
Hilton Campbell

6

İPad'de backgroundViewözellik, gruplanmış tablolar için gri arka plan rengini oluşturmak için kullanılıyor gibi görünüyor. Yani bir should iPad'de gruplandırılmış tablolar için arka plan rengini değiştirmek için nildışarı backgroundViewmülkiyet ve ardından set backgroundColoristenen tablo görünümünde.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

Evet, bu kontrol önceki iOS'leri desteklemek için eklenmelidir.
karim

2

Xcode 6.1 ve iOS 8.1'den itibaren, özellikle iPad için (hücre arka planını da ayarlamak istiyorsanız), tablo arka planını VE hücre arka planını ayarlamanız gerektiğini belirtmekte fayda var.

Örneğin, bir iPhone film şeridinde bir hücreyi rengi temizleyecek şekilde ayarlayabilir, ardından tablonun arka plan görüntüsünü programlı olarak arka plan görüntüsü olan şeffaf bir tablo için ayarlayabilirsiniz. Bununla birlikte, aynı konfigürasyonu iPad'de görüntüleyecek olsaydınız, hücreler net olmazdı. Hücrelerin, iPad için programlı olarak temizlenecek şekilde ayarlanması gerekecektir.


Xcode 6.4 ile oluşturulan ve iOS 9.2 üzerinde çalışan uygulamalar için bu sorunu görüyorum. Arabirim Oluşturucu'da (statik) tablo görünümü hücrelerimin arka plan renklerini temizleyecek şekilde ayarladım ve iPhone'da net göründüler, ancak iPad'de hücrelerin arka plan renklerini görünüm denetleyicimin -viewDidLoad:yönteminde temizleyene kadar beyazdı .
Greg

1

Tablo için backgroundColor ve View ayarını denedim, hiç şansım olmadı (Xcode 5 iOS7.1 iPad simülatörü), iPhone için iyi görünüyordu, ancak iPad'de açık gri arka plan rengi ...

backgroundColor ile çalışmak, hücre için bunu benim için iOS 7.1'de düzeltti 4/2014

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}


0

Uygulamanız hem iPhone hem de iPad'i hedefliyorsa, bunu şu şekilde yapabilirsiniz:

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

TableView tahsisinin ARC için otomatik yayına sahip olmadığına dikkat edin.


0

Başka bir UIViewController'a bir UIViewController ekliyorsanız, görünümünüzün arka planını UITableView'a ek olarak clearColor olarak da ayarlamanız gerekir, aksi takdirde açık gri yerine beyaz bir arka plan elde edersiniz.

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

0
  • İPad 2 simülasyonu
  • İOS 7.1'den 8.3'e kadar çalıştırma
  • XCode 6.3'ten oluşturulmuştur

Yukarıdakilerin hiçbiri, tek bir XIB kullanılarak belirtilen UIViewController-> UITableView için çalışmadı. İşe yarayan şey, tüm kurulumu bir Storyboard'a taşımak ve IB denetçisini kullanarak arka plan rengini ayarlamaktı.


0

Benim de bu tür bir problemim var. Arka UITableViewplan rengi her zaman groupTableViewBackgroundColorne ayarladığım önemli değil.

Belirti şu soruna benzer - UITableView, görünüm görünmeden önce arka plan rengini sıfırlıyor

Arka plan rengini initfonksiyonda ayarladıktan sonra doğru. İçinde viewDidLoadve viewWillAppearbir aşama, bu doğrudur. Ancak viewDidAppearuygulamasında arka plan rengi varsayılan rengine sıfırlanır.

Kabul edilen cevap şu anda çalışmıyor.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

İşte benim çözümüm. Yalnızca tableView'in arka plan renginiviewDidLoadinit veya yerine işlev olarak ayarlayınviewWillAppear .

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
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.