UITableView чіткий фон


90

Я усвідомлюю, що iOS 7 офіційно не випущений, і ми не повинні його обговорювати, АЛЕ я божеволію, намагаючись з’ясувати цю проблему. На iOS 6 мій табличний вигляд був прозорим і виглядав чудово. Вперше запущено iOS 7, а фон білий.

Я спробував зробити таблицю backgroundColor, колір клітинки тощо тощо UIColor clearColor, але не змінив.

Як вирішити цю проблему?

стіл


1
Спробували накрити стіл backgroundViewна чистий?
Скасувати

Не могли б ви показати код, де ви встановлюєте колір тла? А як щодо батьківського погляду? Можливо, фон подання таблиці чіткий, а батьківський - ні?
sooper

Я помітив це саме, але коли я встановив ту саму програму, яка передувала моїй поточній версії до iOS 7.0, цього не відбувалося. Чи криється ця проблема в xCode5.0 тоді?
Totumus Maximus

Відповіді:


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

у комірціForRowAtIndexPath

Крім того, переконайтеся, що ваш view table насправді має прозорий фон (у розкадровці): введіть тут опис зображення


Джордж, додайте цей код всередині методу - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
У випадках, якщо вам дійсно потрібен selectedBackgroundView, ви можете помістити в cellForRowAtIndexPath наступне: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease; або навіть у awakeFromNib: self.selectedBackgroundView = ... Зверніть увагу, що: self.backgroundColor = [UIColor clearColor]; не працює в awakeFromNib під iOS7. Але: cell.backgroundColor = [UIColor clearColor]; працює належним чином лише в cellForRowAtIndexPath для iOS 7.0
slamor

11
Потрібно лише додати рядок: cell.backgroundColor = [UIColor clearColor];
evya

Це працює як шарм cell.backgroundColor = [UIColor clearColor];
bpolat

Як це зробити в Swift?
Кадір Хуссейн,

58

Поставте це:

cell.backgroundColor = [UIColor clearColor];

У цьому розділі:

cellForRowAtIndexPath

1
В iOS 6 достатньо встановити backgroundViewпорожній перегляд, але цей додатковий код потрібен для iOS 7.
Kevin Borders

25

Спробуйте спочатку встановити для backgroundView нуль.

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

Не впевнений, що це зміна документації з iOS7 або вона завжди існувала і просто не впливала на колір тла, але відповідно до UITableView Class Reference @property backgroundView

Msgstr "Ви повинні встановити для цієї властивості значення нуль, щоб встановити колір тла подання таблиці."

редагувати: виправлений синтаксис коду


25

На це відповіли, але багато в чому неправильно.

Вам потрібно реалізувати наведений нижче метод делегування:

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

Ви не можете помістити виправлення в cellForRowAtIndexPath, оскільки це відбувається після візуалізації клітинки, і вона блиматиме білим фоном до того, як фон буде очищений (на повільних пристроях).

Використовуйте цей метод делегування, і ваші проблеми вирішені!


1
Так. Для iOS 7 це спосіб очистити фон. Усі інші наведені вище пропозиції можуть не спрацювати.
girish_vr

15

Насправді офіційно правильне місце для зміни кольору тла комірки відрізняється відповідно до документації ( UITableViewCell Class Reference ):

Незалежно від того, використовуєте ви заздалегідь визначену або спеціальну комірку, ви можете змінити фон клітинки за допомогою властивості backgroundView або змінивши успадковану властивість backgroundColor. У iOS 7 клітинки мають білий фон за замовчуванням; у попередніх версіях iOS комірки успадковують колір тла подання вкладеної таблиці. Якщо ви хочете змінити колір тла комірки, зробіть це в tableView: willDisplayCell: forRowAtIndexPath: метод делегата подання таблиці.


Я намагаюся це зробити, але найперші показані клітинки мають білий фон. Якщо я буду створювати нові комірки, прокручуючи, тоді вони матимуть прозорий фон, який я хочу. Не знаю, що ще спробувати ...
Девід Данхем,

Неважливо, здається, це проблема часу. Я робив речі в awakeFromNib, що було занадто рано.
Девід Данхем,


6

Це досить неприємна проблема. Ось моє поточне рішення:

Додайте це до свого UITableViewCellпідкласу.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

О, Боже. Дякую. Врятував мою ніч. Ваша відповідь повинна бути прийнятою.
Michal Shatz

5

Це працювало для мене в iOS7 +:

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

а потім в cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];


4

Це працювало у мене лише тоді, коли я редагував чіткий колір фону для кожної комірки та чіткий колір для самої таблиці .. І ПРОГРАММАТИЧНО

щоб встановити чіткий колір для таблиці:

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

щоб встановити колір клітинок:

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

3

Одне до приємного. Колір UITable за замовчуванням здається білим (не знаю чому)

Фон білий

Але краще змінити це.


Ідеально! Це був зниклий мир. Не потрібно додаткового рядка коду!
Morpheus78

3

Перший сет

tableView.backgroundColor = [UIColor clearColor];

Другий сет

tableCell.backgroundColor = [UIColor clearColor];

3

створити IB Outlet для перегляду таблиці @IBOutlet слабкий var yourTable: UITableView!

з огляду на навантаження

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

    yourTable.backgroundColor = UIColor.clearColor()
}

якщо ви хочете очистити колір комірки, також зробіть це в

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

    cell.backgroundColor = UIColor.clearColor() 

}

2

У моєму додатку мені довелося встановити кольори для backgroundColorмого UITableViewCellкласу, [UIColor clearColor]коли я оновлювався для iOS 7.


2

Спробуйте

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

І

cell.backgroundColor = [UIColor clearColor];

2

У моєму випадку комірка була створена за допомогою xib. здається, що у конструктора інтерфейсів на xcode5 виникають проблеми з встановленням clearColor для комірки. backgroundColor.

Все, що мені потрібно було зробити, це справді встановити

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

контроль досягає кінця недійсної функції
ropo


2

стрімкий 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

Встановити

tableView.backgroundColor = [UIColor clearColor];

в viewDidLoad.

якщо це не працює, спробуйте:

tableView.backgroundView = nil;

0

Швидко 3

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
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.