UITableViewCell показывает белый фон и не может быть изменен на iOS7
Я реализовал собственный класс ячеек таблицы, который наследует от UITableViewCell
. В представлении таблицы есть фоновое изображение, поэтому я хочу, чтобы фон ячейки был прозрачным. Он отлично выглядит перед iOS7.
Однако в iOS7 ячейка всегда отображается на белом фоне.
Даже для Xcode7, 2015, там является ошибкой в раскадровке: вам нужно установить цвет фона ячейки в коде.
Ответы
Ответ 1
Как заявила Apple DOC (Ссылка на класс UITableViewCell):
... В iOS 7 ячейки по умолчанию имеют белый фон; в более ранних версиях iOS ячейки наследуют цвет фона в представлении таблицы. Если вы хотите изменить цвет фона ячейки, сделайте это в методе tableView: willDisplayCell: forRowAtIndexPath: вашего делегата представления таблицы.
Итак, для моего случая, чтобы показать ячейки с прозрачным фоном, просто нужно реализовать метод делегата в контроллере табличного представления, как показано ниже:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setBackgroundColor:[UIColor clearColor]];
}
Только примечание. Как сказал @null, "... похоже, ошибка в построителе интерфейса...", я не совсем уверен, есть ли у нее ошибка, но кажется, поэтому его комментарий получил несколько голосов. Так что может быть что-то не так, если вы используете IB.:)
Ответ 2
Я немного его исследовал и узнал, что ячейка backgroundColor задана системой Appearance. Поэтому, если все ячейки в вашем приложении имеют четкий фон, самым простым решением будет:
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
И даже если у них разный фон, прозрачный цвет кажется наиболее удобным по умолчанию.
Ответ 3
Запишите это в свой метод cellForRowAtIndexPath перед возвратной ячейкой;
cell.backgroundColor = [UIColor clearColor];
Ответ 4
Я действительно обнаружил, что проблема возникла из цвета фона UITableView, который не установлен для очистки. Если вы измените цвет фона UITableViewCell для очистки, и вы обнаружите, что все еще видите белый цвет, убедитесь, что цвет фона UITableView установлен на очистку (или все, что вы хотите).
[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];
В Swift
tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
Ответ 5
Цвет фона по умолчанию UITableViewCell
в iOS 7 белый.
Вы должны установить свойство backgroundColor
где-то в вашем коде. Например, установите его после создания ячейки.
cell.backgroundColor = [UIColor clearColor];
Ответ 6
Это определенно ошибка iOS. В iOS 8 установка цвета фона в Interface Builder
отлично работает для iPhone, но в iPad он всегда whiteColor
. Чтобы исправить это, в сообщении источника данных cellForIndexPath
, помещая это в:
cell.backgroundColor = cell.backgroundColor
И это сработает. Именно поэтому я сказал, что это ошибка, так как сам код довольно много bullsh * t, но он работает.
Ответ 7
Возможно, ваш UITableViewCell выбран по умолчанию.. Вы можете подтвердить это с помощью нового (или узнать точно представление которого вызывает появление этой белой ячейки).
![enter image description here]()
Интересно, что, зная это, установка цвета фона выбранной ячейки для очистки все еще не сработала. Выполняя еще несколько исследований, оказалось, что мне просто пришлось изменить стиль выделения, когда я создаю эту настраиваемую ячейку
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// do customization here
}
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self setBackgroundColor:[UIColor clearColor]];
return self;
}
Ответ 8
Я обнаружил, что ни один из вышеперечисленных не работал с XCode 5.1.1, iOS 7.1.
Если вы используете Interface Builder с ячейками прототипа, выберите ячейку прототипа, затем из селектора атрибутов в разделе "Вид" измените фоновое изображение по умолчанию на "Очистить цвет":
![enter image description here]()
Кажется, это работает нормально. Ни одно из вышеуказанных изменений кода не требуется, либо - это чистое решение IB.
Ответ 9
Принятый ответ не устранил проблему для меня. Я должен был сделать это:
- В построителе интерфейса выберите представление таблицы. Затем из инспектора атрибутов из раздела Вид установите прозрачность Фон (непрозрачность 0%).
![enter image description here]()
-
Из метода источника данных класса cellForRowAtIndexPath:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
Ответ 10
Для меня настройка
cell.backgroundColor = cell.contentView.backgroundColor;
либо в tableView:willDisplayCell:forRowAtIndexPath:
, либо tableView:cell:forRowAtIndexPath:
выполнил задание.
Это связано с тем, что я установил цвет фона contentView в Interface Builder по желанию.
Ответ 11
При добавлении объектов пользовательского интерфейса в ячейку Xcode 5/IOS 7 добавляет новый "Content View", который будет просматривать все элементы в ячейке. Чтобы установить цвет фона ячейки, установите цвет фона этого содержимого. Вышеупомянутые решения не работали для меня, но эта работа хорошо работала для меня.
Ответ 12
Swift 1.2 Решение:
Просто добавьте явное определение цвета фона вашей ячейки, например
так:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Configure the cell...
cell.backgroundColor = UIColor.clearColor()
return cell
}
Ответ 13
Имела аналогичную проблему, приходилось
- Установите синий цвет как selectionStyle и
-
добавьте это в код, чтобы исправить его
override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
var bgColorView: UIView = UIView()
bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
bgColorView.layer.masksToBounds = true
tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
return true
}
Ответ 14
Вы также можете использовать цветовой код, чтобы сделать вашу UITableView Cell прибыльной.
[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];
Это код для применения метода цветового кода:
-(UIColor*)colorWithHexString:(NSString*)hex
{
NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
if ([cString length] < 6) return [UIColor grayColor];
if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];
if ([cString length] != 6) return [UIColor grayColor];
NSRange range;
range.location = 0;
range.length = 2;
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float) r / 255.0f)
green:((float) g / 255.0f)
blue:((float) b / 255.0f)
alpha:1.0f];
}