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

  1. Из метода источника данных класса 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];
}