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];

в cellForRowAtIndexPath

Кроме того, убедитесь, что ваше tableview действительно имеет прозрачный фон (в раскадровке): введите описание изображения здесь


Джордж, добавьте этот код в метод - (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

Это работает как charm cell.backgroundColor = [UIColor clearColor];
bpolat

Как это сделать в Swift?
Кадир Хуссейн,


25

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

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

Не уверен, является ли это изменение в документации с iOS7 или всегда было там и просто не влияло на цвет фона, но согласно справочнику класса UITableView @property backgroundView

«Вы должны установить для этого свойства значение nil, чтобы установить цвет фона представления таблицы».

edit: исправлен синтаксис кода


25

На это был дан ответ, но во многих отношениях неверно.

Вам необходимо реализовать следующий метод делегата:

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

Вы не можете поместить исправление в cellForRowAtIndexPath, потому что это происходит после рендеринга ячейки, и он будет мигать белым фоном, прежде чем фон станет чистым (на более медленных устройствах).

Используйте этот метод делегирования, и ваши проблемы будут решены!


1
Да. Для iOS 7 это способ очистки фона. Все остальные предложения выше могут не сработать.
girish_vr

15

На самом деле официально правильное место для изменения цвета фона ячейки отличается в соответствии с документацией ( ссылка на класс UITableViewCell ):

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


Я пытаюсь это сделать, но самые первые показанные ячейки имеют белый фон. Если я создаю новые ячейки путем прокрутки, то у них будет желаемый прозрачный фон. Не уверен, что еще попробовать…
Дэвид Данхэм

Неважно, похоже, это проблема времени. Я что-то делал в awakeFromNib, что было слишком рано.
Дэвид Данэм


6

Это довольно неприятная проблема. Вот мое текущее решение:

Добавьте это в свой UITableViewCellподкласс.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

О Боже. Спасибо. Спас мою ночь. Ваш ответ должен был быть принятым.
Михал Шац

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 weak 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 в cell.backgroundColor.

Все, что мне нужно было сделать, это установить

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

контроль достигает конца
непустой


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.