UITableView backgroundColor завжди білий на iPad


75

Я працюю над проектом. У мене є багато UITableViews, які встановлені як чіткий колір. Колір тла їхніх переглядів налаштований на власний колір, і на iPhone все в порядку .

Випуск з’являється на iPad ! Я пробував майже все, але у мене UITableViewбілий колір.

Я перевірив інші теми, наприклад: UITableView backgroundColor завжди сірий на iPad , але нічого не працювало. Крім того, моя проблема не сіра, вона біла, як сніг!

Що може бути причиною цього?


Чи використовуєте ви Xcode 6 із класами розміру? Ви можете встановити різні кольори тла залежно від класу розміру, який ви використовуєте.
brandonscript

@remus Ні, я працюю над Xcode 6, але відключив класи розмірів.
Göktuğ Aral

3
Встановіть точку розриву під час створення комірок і перейдіть до Налагодження -> Перегляд налагодження -> Захоплення ієрархії подання. Це дозволить вам вивчити кожен підпрогляд вашого стеку подань, щоб ви могли точно побачити, який вигляд викликає проблему. Зверніть увагу, я думаю, що це працює лише в симуляторі
Кріс

встановити контекстне зображення та клітинку на чистий колір
Vineesh TP

@Chris Я спробував на реальному пристрої тиждень тому :)
zcui93

Відповіді:


125

Хороші новини: Згідно з примітками до випуску, для 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. Мені вдалося визначити це за допомогою налагоджувача ієрархії подання.

Після того, як я це зробив, я зміг використовувати колір фону таблиці, і мені не потрібно було встановлювати фоновий вигляд, хоча це теж працює.


h / t до @SterlingChristensen, відповідь на яку це базується.
Бен Флінн,

Химерно, це для мене працює. Подав
Джеффрі

Це працює, однак слід зазначити, що may cell.contentView.backgroundColor повертає нуль, навіть якщо IB містить значення, тому може не працювати, коли кольори тла UITableView відрізняються від його комірок.
Крашалот

Я не знаю, як думають розробники яблук!
hasan

Дякую, чудово працює для мене. У моєму випадку мені знадобилося зворотне cell.contentView.backgroundColor = cell.backgroundColor. Після того, як я надрукував cell.contentView.backgroundColorі помітив, що це було nilраніше, я видалив вашу пропозицію та змінив колір подання вмісту в
раскадровці,

39

Ви можете це виправити, встановивши параметр API зовнішнього вигляду у файлі appDelegate:

Стрімкий:

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

1
Це рішення врятувало мені життя !. Дякую
naffie

Працював як оберіг! У Завдання C:[UITableViewCell appearance].backgroundColor = [UIColor clearColor];
Solsma Dev

єдине рішення, яке працювало для мене! спасибі купу !!
daisura99

Приємне, просте рішення!
Fivewood

19

Замість того, щоб встановити колір тла, спробуйте скористатися фоновим видом, наприклад:

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

У мене були проблеми, коли використання backgroundColor не завжди дає ефект, але натомість встановлення фонового подання працює нормально.


Так, це спрацювало, дякую. Але це справді дивно! ClearColor TableView працює на iPhone, але чому не працює на iPad. Яка може бути різниця?
Göktuğ Aral

Клавіатура повинна підтримувати деякі моделі інтерфейсу, яких у телефону немає, наприклад, контролери з розділеним переглядом та поповери, можливо, це має щось спільне. Цікаво, чи трапляється це на iPhone 6+, оскільки він повинен підтримувати багато тих самих функцій інтерфейсу.
Джон Стівен

Це не трапляється 6+
Естель,

Чи залишається білим, коли у вас є достатньо комірок таблиці, щоб заповнити екран, або лише на коротких таблицях? Здається, якимось чином пов’язане з кількістю комірок у таблиці.
Крашалот

12

На основі відповіді Бена Флінна ... колір фону background.contentView не обов'язково дорівнює кольору cell.background. У цьому випадку я виявив, що це спрацювало у вирішенні проблеми з білим тлом iPad у більшості ситуацій:

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

Хоча заява виглядає смішною та божевільною ... вона вирішує проблему.


Привіт, я намагаюся змусити це працювати для Monotouch. Я працюю з Xamarin.iOS, використовуючи реалізацію ac #. Як я можу реалізувати ваше рішення?
naffie

Цей трюк не вирішив цю проблему на iPad для мене, вибачте. cell.backgroundColor = [UIColor clearColor]; все-таки зробив.
malhal

10

Стрімкий 5

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

Відповідь від @Ben Flynn cell.backgroundColor = self.contentView.backgroundColorне може цього досягти. Причиною є self.contentView.backgroundColorнуль, тому те, що ви зробили, просто зрозуміло cell.backgroundColor = nil.

В основному це помилка з Xcode (я думаю, так, це відмовно!), Все cell.backgroundColorще має колір, але він не може відображатися.

Після налагодження на деякий час, на основі відповіді @Ray W, ось моє рішення.

class YourCustomCell: UICollectionViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = backgroundColor // Tricky to re-apply the background color
    }
}

Працює для мене, якщо я віднесу його до такої категорії, як "@implementation UITableViewCell (fixiPadColors)".
LPG

не слід робити так. Я вважаю за краще рішення @Ray W у вашому випадку. Перевірте тут причина stackoverflow.com/questions/9424004 / ...
nahung89

5

Це вирішить це питання для мене

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

3

З мого досвіду, деякі версії iOS встановлюють backgroundColor UITableViewCell перед викликом делегата tableView:willDisplayCell:forRowAtIndexPath:. Повернення до власного кольору в цьому методі це виправляє.


Так, це рішення, навіть це дивно! Я знайшов його, коли спробував на симуляторі iPad iOS 8.2, але він був правильним у всіх інших версіях iPhone. Просто поставте [комірка setBackgroundColor: [UIColor clearColor]]; до вищезазначеного місця.
BootMaker

Так, ця відповідь також працює, оскільки я вже пробував це, у мене була така сама проблема в iOS 9 iPad tablevei, колір фону клітинки змінився на білий, працюючи нормально на всіх iPhone
Waseem05

2

Свіфт 3.1

Я обійшов цю помилку, помістивши її у свій UITableViewCellпідклас:

Коли комірка завантажується з файлу NIB:

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

і коли система повторно використовує клітинку

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

Як повідомляє animeshporwal, iOS 10 повинен вирішити цю проблему в Interface Builder .


2

SWIFT 3.XX

Покладіть це

UITableViewCell.appearance().backgroundColor = UIColor.clear

В AppDelegate

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

1

Я використовую Storyboardз UITableViewControlrs, тому найпростішим рішенням було підклас усіх контролерів та додавання цього методу до батьківського

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

1

SWIFT

Це теж траплялося зі мною. Вигляд мого столу в моєму SWRevealViewController виглядав білим на моєму iPad, коли він виглядав чітко (саме так я хотів, щоб це було із фоновим зображенням) на моєму iPhone. Я спробував усе вищезазначене, але це те, що в підсумку працювало для мене, на мій viewDidLoad ().

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

0

Цього можна досягти в розкадруванні наступним чином:

  • Покажіть контур документа для вашої розкадрування
  • У вашій таблиці виберіть TableViewCell
  • перейдіть до перегляду вмісту в межах цієї комірки
  • Встановіть колір тла у поданні вмісту.

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


0

Я просто мав цю проблему і виправив її, змінивши backgroundColor of View (на відміну від таблиці tableView). Здається на iPad, це той, який використовується першим, і в моєму випадку він був встановлений на білий.


0

SWIFT мене теж була ця проблема. Чудово працює на .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

Дуже дивно, я не знаю, що тут відбувається, але це вирішило це для мене.



0

У мене є прозорий вигляд таблиці з напівпрозорими клітинками вигляду таблиці. Я встановлюю колір тла подання таблиці так, щоб він очищався під час створення таблиці. Це працює для всіх комбінацій iOS / пристроїв, крім iPad + iOS 8, де колір фону залишається білим.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.