UITableView backgroundColor всегда белый на iPad

Я работаю над проектом. У меня есть много UITableView, которые установлены как чистый цвет. Цвет фона их просмотров установлен на мой пользовательский цвет, и все в порядке на iPhone.

Проблема возникает на iPad! Я попробовал почти все, но мой UITableView имеет белый цвет.

Я проверил другие темы, например: UITableView backgroundColor всегда серый на iPad, но ничего не получилось. Кроме того, моя проблема не серая, она белая, как снег!

Что может быть причиной этого?

Ответ 1

Хорошие новости: В соответствии с примечаниями к выпуску для iOS 10:

При работе на iPad цвет фона, установленный для UITableViewCell в раскадровке теперь соблюдается.

Для версий < 10:

Я видел это в iOS 8 (8.3). Несмотря на то, что в IB мои ячейки были "четким цветом", а их контентные представления были "четким цветом", они отображали бы как белые. Недостаточное, но разумное решение, поскольку оно по-прежнему принимает значения от IB:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.backgroundColor = cell.contentView.backgroundColor;
    return cell;
}

Кажется, что мои удаленные повторно используемые ячейки заставляют их фон белым на iPad. Я смог определить это, используя отладчик иерархии представлений.

Как только я это сделал, мне удалось использовать цвет фона таблицы и не нужно было устанавливать фоновый просмотр, хотя это тоже работает.

Ответ 2

Вы можете исправить это, установив API-интерфейс внешнего вида в файле appDelegate:

Swift:

UITableViewCell.appearance().backgroundColor = UIColor.clearColor()

Ответ 3

Вместо того, чтобы устанавливать цвет фона, попробуйте вместо этого использовать фоновый режим, например:

- (void)viewDidLoad {
    self.tableView.backgroundView = [UIView new];
    self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}

У меня были проблемы, когда использование backgroundColor не всегда дает эффект, но установка фонового представления работает нормально.

Ответ 4

Создание ответа Бен Флинна... cell.contentView цвет фона не обязательно равен цвету cell.background. В этом случае я обнаружил, что это работало в решении проблемы с белым фоном iPad в следующих ситуациях:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        ...
        cell.backgroundColor = cell.backgroundColor;
        return cell;
    }

Пока утверждение выглядит смехотворным и сумасшедшим... это решает проблему.

Ответ 5

У меня есть табличный вид с множеством разных ячеек внутри, каждый из которых имеет другой цвет.

Ответ от @Ben Flynn cell.backgroundColor = self.contentView.backgroundColor не может этого достичь. Причина в том, что self.contentView.backgroundColor равна нулю, так что вы сделали, просто очистите cell.backgroundColor = nil.

В основном это ошибка от Xcode (я думаю, да, это отстой!), cell.backgroundColor все еще имеет цвет, но он не может отображаться.

После отладки на некоторое время, на основе ответа @Ray W, вот мое решение.

@impelement YouCustomCellClass

- (void)awakeFromNib {
    [super awakeFromNib];
    self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}

@end

Ответ 6

По моему опыту, некоторые версии iOS устанавливают UITableViewCell backgroundColor перед вызовом делегата tableView:willDisplayCell:forRowAtIndexPath:. Сброс обратно к вашему пользовательскому цвету в этом методе исправляет его.

Ответ 7

Это решает эту проблему для меня

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    tableView.backgroundColor = UIColor.clear
}

Ответ 8

SWIFT 3.XX

Поместите это

UITableViewCell.appearance().backgroundColor = UIColor.clear

В AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

Ответ 9

Я использую Storyboard с UITableViewControlrs, поэтому самым простым решением было подклассировать все контроллеры и добавить этот метод к родительскому

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        cell.backgroundColor = [UIColor clearColor];
    }
}

Ответ 10

СВИФТ

Это случилось со мной. Моя таблица в моем SWRevealViewController оказалась белой на моем iPad, когда она выглядела ясной (как я ее хотела с фоновым изображением) на моем iPhone. Я пробовал все вышеперечисленное, но это то, что в конечном итоге работало для меня в моем представленииDidLoad().

tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()

Ответ 11

Swift 3.1

Я работал над этой ошибкой, поместив ее в мой подкласс UITableViewCell:

Когда ячейка загружается из файла NIB:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundColor = UIColor.clear
}

и когда ячейка повторно используется системой

override func prepareForReuse() {
    super.prepareForReuse()
    self.backgroundColor = UIColor.clear
}

iOS 10 должен исправить эту проблему в Interface Builder, как сказал animeshporwal.

Ответ 12

Это может быть достигнуто в Раскадке следующим образом:

  • Показать схему документа для раскадровки
  • В вашей таблице выберите TableViewCell
  • перейдите в представление содержимого внутри этой ячейки
  • Установите цвет фона в представлении "Содержимое".

Результат: просмотры симуляторов iPad и iPhone выглядят одинаково

Ответ 13

У меня была эта проблема и исправлена ​​ее, изменив backgroundColor View (в отличие от таблицы TableView). Похоже на iPad, тот, который используется первым, и в моем случае он был установлен в белый цвет.

Ответ 14

СВИФТ У меня тоже была эта пробема. Прекрасно работает на .phone, но tableViewCells идет белым на .pad. Думал, что я покажу, как я исправил его с помощью быстрого.

Соедините TableViewCell с viewController.swift как @IBOutlet, например:

    @IBOutlet weak var tvc1: UITableViewCell!
    @IBOutlet weak var tvc2: UITableViewCell!
    @IBOutlet weak var tvc3: UITableViewCell!

Затем в viewDidLoad введите следующее:

tvc1.backgroundColor = tvc1.backgroundColor
tvc2.backgroundColor = tvc2.backgroundColor
tvc3.backgroundColor = tvc3.backgroundColor

Очень странно, я не знаю, что здесь происходит, но это решило это для меня.

Ответ 15

Это похоже на исправление с iOS 10 Beta 4, как указано в примечаниях к выпуску в примечаниях UIKit:

введите описание изображения здесь

Ответ 16

У меня есть прозрачный вид таблицы с полупрозрачными ячейками просмотра таблицы. Когда я создаю таблицу, я устанавливаю цвет фона таблицы. Это работает для всех комбинаций iOS/device, кроме iPad + iOS 8, где цвет фона остается белым.

Для меня настройка цвета фона ячейки на полупрозрачный, а цвет фона представления содержимого для очистки работает, так как я делаю это на каждом tableView(_ tableView: UITableView, cellForRowAt indexPath). Проблема для меня была только в том, что фон в виде стола оставался белым.

Я пробовал все комбинации, которые я нашел по этой проблеме, но единственное, что мне действительно нужно было, это установить прозрачность фона таблиц на каждом tableView(_ tableView: UITableView, cellForRowAt indexPath). Не суперинтуитивный, но, по крайней мере, он работает.: P