UITableView latar belakang yang jelas

90

Saya menyadari bahwa iOS 7 belum dirilis secara resmi dan kita seharusnya tidak membahasnya TAPI saya akan gila mencoba mencari tahu masalah ini. Di iOS 6, tampilan tabel saya transparan dan tampak hebat. Pertama kali menjalankan iOS 7, dan latar belakangnya putih.

Saya telah mencoba membuat backgroundColor tabel, warna sel dll menjadi UIColor clearColor tetapi tidak ada perubahan.

Bagaimana cara mengatasi masalah ini?

meja

Teddy13
sumber
1
Mencoba mengatur meja backgroundViewmenjadi jelas?
Urungkan
Bisakah Anda menunjukkan kode di mana Anda mengatur warna latar belakang? Bagaimana dengan pandangan orang tua? Mungkin latar belakang tampilan tabel jelas tetapi induknya tidak?
sooper
Saya memperhatikan hal yang sama tetapi ketika saya menginstal aplikasi yang sama yang mendahului versi saya saat ini ke iOS 7.0, itu tidak terjadi. Apakah masalah ini terletak pada xCode5.0?
Totumus Maximus

Jawaban:

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

di cellForRowAtIndexPath

Selain itu, pastikan tampilan tabel Anda benar-benar memiliki latar belakang transparan (di papan cerita): masukkan deskripsi gambar di sini

slamour
sumber
George, tambahkan kode itu di dalam metode - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings
1
Untuk kasus ini, jika Anda benar-benar membutuhkan selectedBackgroundView, Anda dapat meletakkan berikut ini di cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alokasi] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; atau bahkan di awakeFromNib: self.selectedBackgroundView = ... Perhatikan, bahwa: self.backgroundColor = [UIColor clearColor]; tidak berfungsi di awakeFromNib di iOS7. Tapi: cell.backgroundColor = [UIColor clearColor]; hanya berfungsi dengan baik di cellForRowAtIndexPath untuk iOS 7.0
slamour
11
Hanya perlu menambahkan baris: cell.backgroundColor = [UIColor clearColor];
evya
Ini bekerja seperti charm cell.backgroundColor = [UIColor clearColor];
bpolat
Bagaimana melakukan ini di Swift?
Qadir Hussain
58

Taruh ini:

cell.backgroundColor = [UIColor clearColor];

Di bagian ini:

cellForRowAtIndexPath
Maximus Vermillion
sumber
1
Di iOS 6, cukup untuk menyetel backgroundViewke tampilan kosong, tetapi kode tambahan ini diperlukan untuk iOS 7.
Kevin Borders
25

Coba setel backgroundView ke nol terlebih dahulu.

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

Tidak yakin apakah ini adalah perubahan dalam dokumentasi dengan iOS7 atau selalu ada dan hanya tidak mempengaruhi warna latar belakang, tapi sesuai Referensi Kelas UITableView @property backgroundView

"Anda harus menyetel properti ini ke nol untuk menyetel warna latar belakang tampilan tabel."

edit: sintaks kode yang diperbaiki

dandan
sumber
25

Ini telah dijawab, tetapi salah dalam banyak hal.

Anda perlu menerapkan metode delegasi di bawah ini:

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

Anda tidak dapat menempatkan perbaikan di cellForRowAtIndexPath karena itu terjadi setelah sel dirender, dan itu akan mem-flash latar belakang putih sebelum latar belakang disetel untuk dihapus (pada perangkat yang lebih lambat).

Gunakan metode delegasi ini dan masalah Anda terpecahkan!

menangkap
sumber
1
Iya. Untuk iOS 7 ini adalah cara untuk menghapus latar belakang. Semua saran lain di atas mungkin tidak berfungsi.
girish_vr
15

Sebenarnya tempat resmi yang benar untuk mengubah warna latar belakang sel berbeda menurut dokumentasi ( Referensi Kelas UITableViewCell ):

Apakah Anda menggunakan sel yang sudah ditentukan sebelumnya atau kustom, Anda bisa mengubah latar belakang sel menggunakan properti backgroundView atau dengan mengubah properti backgroundColor yang diwariskan. Di iOS 7, sel memiliki latar belakang putih secara default; di versi iOS yang lebih lama, sel mewarisi warna latar belakang tampilan tabel yang melampirkan. Jika Anda ingin mengubah warna latar belakang sel, lakukan di tableView: willDisplayCell: forRowAtIndexPath: metode delegasi tampilan tabel Anda.

asdusd
sumber
Saya mencoba ini, tetapi sel pertama yang ditampilkan semuanya memiliki latar belakang putih. Jika saya membuat sel baru dengan menggulir, mereka akan memiliki latar belakang transparan yang saya inginkan. Tidak yakin harus mencoba apa lagi…
David Dunham
Tidak apa-apa, sepertinya ini masalah waktu. Saya melakukan hal-hal di awakeFromNib, yang terlalu dini.
David Dunham
7

swift 3, 4 dan 5

cell.backgroundColor = UIColor.clear
Jamal alayq
sumber
6

Ini adalah masalah yang cukup membuat frustrasi. Inilah solusi saya saat ini:

Tambahkan ini ke UITableViewCellsubkelas Anda .

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
Berk
sumber
Ya Tuhan. Terima kasih. Menyelamatkan malam saya. Jawaban Anda seharusnya diterima.
Michal Shatz
5

Ini berhasil untuk saya di iOS7 +:

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

lalu masuk cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
DevC
sumber
4

coba cuplikan kode ini

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
sumber
4

Ini hanya berfungsi untuk saya ketika saya mengedit warna latar belakang yang jelas untuk setiap sel dan warna yang jelas untuk tabel itu sendiri .. KEDUA SECARA PROGRAM

untuk mengatur warna meja yang jelas:

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

untuk mengatur warna sel:

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

Satu hal yang menyenangkan. Warna default UITable sepertinya putih (saya tidak tahu kenapa)

Latar belakang putih

Tapi lebih baik ubah itu.

Paul Brewczynski
sumber
Sempurna! Itulah kedamaian yang hilang. Tidak perlu baris kode tambahan!
Morpheus78
3

Set pertama

tableView.backgroundColor = [UIColor clearColor];

Set kedua

tableCell.backgroundColor = [UIColor clearColor];
Fantasyczl.dll
sumber
3

buat Outlet IB untuk tampilan tabel @IBOutlet weak var yourTable: UITableView!

dalam tampilan beban

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

    yourTable.backgroundColor = UIColor.clearColor()
}

jika Anda ingin membersihkan warna sel juga lakukan ini di

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

    cell.backgroundColor = UIColor.clearColor() 

}
veenaay pawar
sumber
2

Di aplikasi saya, saya harus mengatur backgroundColordi UITableViewCellkelas saya untuk [UIColor clearColor]diwarnai ketika saya memperbarui untuk iOS 7.

Arthur Dexter
sumber
2

Mencoba

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

Dan

cell.backgroundColor = [UIColor clearColor];
Jorgy
sumber
2

Dalam kasus saya, sel dibuat menggunakan xib. sepertinya pembuat antarmuka di xcode5 mengalami masalah dalam menyetel clearColor ke cell.backgroundColor.

Yang perlu saya lakukan hanyalah mengatur

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}
Ben G
sumber
kontrol mencapai akhir fungsi non-void
ropo
2

Cukup pilih Clear Color pada View Background untuk tabel dan untuk sel juga.

Walter Barlet
sumber
2

cepat 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
sumber
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
sumber
0

Set

tableView.backgroundColor = [UIColor clearColor];

di viewDidLoad.

jika ini tidak berhasil, coba:

tableView.backgroundView = nil;
Lal Krishna
sumber
0

Dalam 3 cepat

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
}
Patricio Bravo
sumber