UITableView чистый фон

90

Я понимаю, что iOS 7 официально не выпущена, и мы не должны обсуждать это, НО я схожу с ума, пытаясь разобраться в этой проблеме. В iOS 6 мой вид таблицы был прозрачным и отлично выглядел. Первый раз запускаю iOS 7, а фон белый.

Я попытался сделать таблицу backgroundColor, цветом ячейки и т.д. UIColor clearColor, но без изменений.

Как исправить эту проблему?

Таблица

Тедди13
источник
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?
Кадир Хуссейн,
58

Положи это:

cell.backgroundColor = [UIColor clearColor];

В этой секции:

cellForRowAtIndexPath
Максимус Вермиллион
источник
1
В iOS 6 достаточно установить backgroundViewпустой вид, но этот дополнительный код необходим для iOS 7.
Кевин Бордерс,
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: метод делегата табличного представления.

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

быстрые 3, 4 и 5

cell.backgroundColor = UIColor.clear
Джамал алайк
источник
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];
DevC
источник
4

попробуйте этот фрагмент кода

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Марко Антонио Узкатеги Пескос
источник
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
}
SoliQuiD
источник
3

Одно приятно. Цвет UITable по умолчанию кажется белым (я не знаю почему)

Фон белый

Но лучше это изменить.

Пол Брючинский
источник
Отлично! Это был недостающий покой. Никаких дополнительных строк кода не требуется!
Morpheus78
3

Первый набор

tableView.backgroundColor = [UIColor clearColor];

Второй набор

tableCell.backgroundColor = [UIColor clearColor];
Fantasyczl
источник
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() 

}
Veenaay Pawar
источник
2

В моем приложении мне пришлось установить цвет для backgroundColorмоего UITableViewCellкласса [UIColor clearColor]при обновлении для iOS 7.

Артур Декстер
источник
2

Пытаться

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

А также

cell.backgroundColor = [UIColor clearColor];
Jorgy
источник
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

Просто выберите «Очистить цвет на фоне просмотра» как для таблицы, так и для ячейки.

Уолтер Барлет
источник
2

быстрый 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
источник
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
}
Патрисио Браво
источник