UITableView backgroundColor selalu abu-abu di iPad

128

Ketika saya mengatur backgroundColoruntuk saya UITableViewitu berfungsi dengan baik di iPhone (perangkat dan simulator) tetapi BUKAN pada simulator iPad. Alih-alih, saya mendapatkan latar belakang abu-abu terang untuk semua warna yang saya atur termasuk groupTableViewBackgroundColor.

Langkah-langkah mereproduksi:

  1. Buat proyek berbasis navigasi baru.
  2. Buka RootViewController.xib dan atur gaya tampilan tabel ke "Dikelompokkan".
  3. Tambahkan responden ini ke RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Pilih Simulator SDK 3.2, bangun dan jalankan.
  5. Anda akan mendapatkan latar belakang hitam (perangkat dan simulator).
  6. Pilih target Anda di pohon proyek.
  7. Klik pada Proyek: Tingkatkan Target Saat Ini untuk iPad.
  8. Bangun dan jalankan.
  9. Anda akan mendapatkan latar belakang abu-abu terang.
  10. Kembalikan gaya tampilan tabel ke Plain dan Anda akan mendapatkan latar belakang hitam.

Terima kasih atas bantuan Anda!

rjobidon
sumber
2
Ah, sekarang iPhone dan iPad disejajarkan lagi di sini di iOS6 :-)
Gerd
3
Bravo karena menggunakan istilah yang jarang digunakan, "Langkah untuk mereproduksi"! :-p
Constantino Tsarouhas

Jawaban:

245

Coba salah satunya.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
ditarik ke depan
sumber
3
Saya tidak tahu apakah ada efek samping tetapi berhasil! Terima kasih! self.tableView.backgroundView = nil;
rjobidon
30
SANGAT PENTING: Ini hanya berfungsi dengan SDK 3.2. Untuk kompatibilitas mundur dengan 3.1.3. dan sebelumnya Anda harus memeriksa apakah tampilan tabel merespons ke properti backgroundView: if ([self.tableView respondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; jika tidak, aplikasi Anda akan macet dan keluar dengan tiba-tiba, Anda bisa percaya padaku!
rjobidon
1
ya, saya mencoba solusi di atas dan itu berhasil untuk saya. Adakah yang bisa memberitahu saya apa sebenarnya masalah ini. Mengapa ketika kita menjalankan aplikasi, itu diklik?
Naveen
Tolong, beri tahu kami mengapa ini diperlukan untuk menyelesaikan masalah ini?
mask8
karena jelas ios baru memungkinkan Anda menempatkan tampilan latar belakang. Mengapa diatur ke tampilan abu-abu hanyalah masalah yang diperkenalkan Apple. sangat aneh, sangat bodoh. Tapi sekali lagi setiap hari saya menemukan sesuatu yang aneh dan bodoh saat coding untuk iOS
The Lazy Coder
30

Terima kasih banyak atas solusi ini. Saya menerapkan ini pada properti UITableView dengan IBOutlet di UIViewController dan berfungsi dengan baik seperti:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent
Alexander
sumber
tidak ada kebutuhan untuk garis tengah [panelTable setBackgroundView: [[[alokasi UIView] init] autorelease]];
NIKHIL
4
Api Pembekuan: sebenarnya ada. Tanpa itu, Anda mendapatkan artefak menggambar aneh di perbatasan sel tabel.
Hilton Campbell
6

Di iPad backgroundViewproperti tersebut tampaknya digunakan untuk membuat warna latar belakang abu-abu untuk tabel yang dikelompokkan. Jadi untuk mengubah warna latar belakang untuk tabel yang dikelompokkan di iPad, Anda harus nilkeluar dari backgroundViewproperti dan kemudian mengatur backgroundColortampilan tabel yang diinginkan.

- (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];
}
Philipp Frischmuth
sumber
Ya, pemeriksaan ini harus ditambahkan untuk mendukung iOS sebelumnya.
karim
2

Saya pikir perlu dicatat bahwa pada Xcode 6.1 dan iOS 8.1, khusus untuk iPad (jika Anda ingin mengatur latar belakang sel juga) tampaknya Anda harus mengatur latar belakang tabel DAN latar belakang sel.

Misalnya, pada storyboard iPhone Anda dapat mengatur sel menjadi warna yang jelas, lalu mengatur gambar latar belakang tabel secara terprogram untuk tabel transparan dengan gambar latar belakang. Namun jika Anda melihat konfigurasi yang sama ini di iPad sel tidak akan jelas. Sel harus diatur agar dihapus secara pemrograman untuk iPad.

Pria bijak
sumber
Saya melihat masalah ini untuk aplikasi yang dibuat dengan Xcode 6.4 dan berjalan di iOS 9.2. Saya mengatur warna latar belakang sel tampilan tabel (statis) untuk dihapus di Interface Builder, dan tampak jelas di iPhone, tetapi di iPad warnanya putih hingga saya mengatur warna latar sel untuk menghapus dalam -viewDidLoad:metode pengontrol tampilan saya .
Greg
1

mencoba mengatur latar belakangWarna dan Tampilan untuk tabel, tidak berhasil (simulator iPad Xcode 5 iOS7.1), tampak OK untuk iPhone, tetapi warna latar abu-abu terang pada iPad ...

bekerja dengan backgroundColor untuk sel itu sendiri memperbaiki ini untuk saya di iOS 7.1 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;

}

kubus108
sumber
0

Jika aplikasi Anda menargetkan iPhone dan iPad, Anda dapat melakukannya seperti ini:

[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

Perhatikan bahwa alokasi TableView tidak memiliki autorelease untuk ARC.

gmogames
sumber
0

Jika Anda menambahkan UIViewController ke UIViewController lain, Anda juga perlu mengatur latar belakang tampilan Anda menjadi clearColor selain UITableView atau Anda akan mendapatkan latar belakang putih alih-alih abu-abu terang.

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];
irmu
sumber
0
  • Mensimulasikan iPad 2
  • Menjalankan iOS 7.1 hingga 8.3
  • Dibangun dari XCode 6.3

Tidak satu pun di atas yang berfungsi untuk UIViewController-> UITableView saya yang ditentukan menggunakan XIB tunggal. Apa yang berhasil adalah memindahkan seluruh pengaturan ke Storyboard, dan mengatur warna latar belakang menggunakan inspektur IB.

QED
sumber
0

Saya juga punya masalah seperti ini. ItuUITableView warna latar belakang akan selalu groupTableViewBackgroundColortidak peduli apa yang saya set.

Gejalanya seperti masalah ini - UITableView mengatur ulang warna latar belakangnya sebelum tampilan muncul

Setelah saya mengatur warna latar belakang initberfungsi, itu benar. DiviewDidLoad dan viewWillAppearpanggung, itu benar. Namun, dalam viewDidAppear, warna latar diatur ulang ke warna default.

Jawaban yang diterima tidak berfungsi sekarang.

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

Ini solusinya. Cukup atur warna latar belakang tableView dalam viewDidLoadfungsi daripada initatau viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
keanggunan66
sumber