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