2013-09-12 3 views
85

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

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

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

the table

+1

попытался установить таблицы 'backgroundView' к четкому один ? – Undo

+0

Не могли бы вы показать код, в котором вы устанавливаете цвет фона? Как насчет родительского представления? Возможно, фон таблицы выглядит ясным, но родительский нет? – sooper

+0

Я заметил это же, но когда я установил то же приложение, которое предшествовало моей текущей версии iOS 7.0, этого не произошло. В этом случае эта проблема лежит в xCode5.0? –

ответ

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

в cellForRowAtIndexPath

Кроме того, убедитесь, что ваш TableView на самом деле имеет транс родительский фон (в раскадровке): enter image description here

+0

Не работает до тех пор, пока не будет выбрана последняя ячейка –

+0

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

2

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

55

Надень:

cell.backgroundColor = [UIColor clearColor]; 

В этом разделе:

cellForRowAtIndexPath 
+1

В iOS 6 достаточно установить «backgroundView» на пустой вид, но этот дополнительный код необходим для iOS 7. –

5

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

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

- (void)didMoveToSuperview { 
    [super didMoveToSuperview]; 

    self.backgroundColor = [UIColor clearColor]; 
} 
+0

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

24

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

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

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

«Вы должны установить это свойство в ноль, чтобы установить цвет фона в виде таблицы. "

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

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; 
} 
+0

управление достигает конца не-void функции – ropo

4

попробовать этот фрагмент кода

cell.contentView.backgroundColor = [UIColor clearColor]; 
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5]; 
12

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

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

+0

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

+0

Ничего, кажется, проблема времени. Я делал вещи в awakeFromNib, что было слишком рано. –

5

Это работает для меня в iOS7 +:

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

, а затем в cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor]; 
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough 

cell.backgroundColor = [UIColor clearColor]; 
cell.selectedBackgroundView = [[UIView new] autorelease]; 
2

Попробуйте

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

И

cell.backgroundColor = [UIColor clearColor]; 
22

Это ответ, но неправильно во многих отношениях.

Вы должны реализовать метод ниже делегата:

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

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

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

+1

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

+1

это правильный ответ – user1244109

2

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

Background white

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

+0

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

3

Первый набор

tableView.backgroundColor = [UIColor clearColor]; 

Второй набор

tableCell.backgroundColor = [UIColor clearColor]; 
2

Просто выберите Clear Color на View фона для таблицы и для ячейки также.

+0

самое простое решение. Спасибо! – OWADVL

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 
} 
+0

Это единственное, что сработало для меня. –

3

создать IB розетку для табличных @IBOutlet слабой вар yourTable: UITableVie ш!

в вид нагрузки

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() 

} 
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 
} 
2

скор 3

override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.backgroundColor = UIColor.clear 
} 
Смежные вопросы