UITableView backgroundЦвет на iPad завжди сірий


128

Коли я встановив backgroundColorдля свого, UITableViewвін працює добре на iPhone (пристрій та симулятор), але НЕ на iPad-симуляторі. Натомість я отримую світло-сірий фон для будь-якого кольору, який я встановив, зокрема groupTableViewBackgroundColor.

Кроки до відтворення:

  1. Створіть новий проект на базі навігації.
  2. Відкрийте RootViewController.xib і встановіть стиль перегляду таблиці на "Групувати".
  3. Додайте цього відповіді до RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Виберіть Simulator SDK 3.2, складіть та запустіть.
  5. Ви отримаєте чорний фон (пристрій та тренажер).
  6. Виберіть ціль у дереві проекту.
  7. Клацніть на Project: Upgrade Current Target for iPad.
  8. Побудувати та запустити.
  9. У вас вийде світло-сірий фон.
  10. Поверніть стиль перегляду таблиці на Звичайний, і ви отримаєте чорний фон.

Спасибі за вашу допомогу!


2
Ах, тепер iPhone і iPad знову вирівняні тут, в iOS6 :-)
Герд

3
Браво за використання рідко вживаних термінів "Кроки до відтворення"! :-p
Константіно Царухас

Відповіді:


245

Спробуйте один із них.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

3
Я не знаю, чи є побічні ефекти, але це працює! Дякую! self.tableView.backgroundView = нульовий;
rjobidon

30
ДУЖЕ ВАЖЛИВО: Це працює лише з SDK 3.2. Для зворотної сумісності з 3.1.3. і раніше ви повинні перевірити, чи відповідає подання таблиці на властивість backgroundView: якщо ([self.tableView respotsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; в іншому випадку ваша програма вийде з ладу і вийде різко, ви можете мені довіритися!
rjobidon

1
так, я спробував вищевказане рішення, і воно спрацювало на мене. Хтось може сказати мені, що це за проблема насправді. Чому, коли ми запускаємо додаток, воно стає сірим?
Naveen

Скажіть будь-ласка, чому це потрібно для вирішення цієї проблеми?
маска8

тому що явно новий ios дозволяє вам поставити фоновий вигляд. Чому його встановлення на деякий сірий вигляд - лише питання, яке представила Apple. дуже дивна, дуже німа. Але потім знову щодня я стикаюся з чимось дивним і німим, кодуючи iOS
The Lezy Coder

30

Дуже дякую за це рішення. Я застосував це до властивості UITableView з IBOutlet в UIViewController, і це добре працює як:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

немає жодної потреби в середній лінії [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL

4
Замерзлий вогонь: насправді є. Без цього ви отримуєте дивні артефакти малювання в меж комірки таблиці.
Хілтон Кемпбелл

6

На iPad backgroundViewвластивість, здається, використовується для створення сірого кольору фону для згрупованих таблиць. Отже, для зміни кольору фону для згрупованих таблиць на iPad слід nilвиділити backgroundViewвластивість та встановити backgroundColorпотрібний вид таблиці.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

Так, цю перевірку слід додати для підтримки попередніх iOS.
Карим

2

Я думаю, що варто відзначити, що для Xcode 6.1 та iOS 8.1, спеціально для iPad (якщо ви також хочете встановити фон стільника), здається, що ви повинні встановити фон таблиці та фон комірки.

Наприклад, на планшеті iPhone iPhone можна встановити клітинку для очищення кольору, а потім встановити фонове зображення таблиці програмно для прозорої таблиці з фоновим зображенням. Однак якби ви переглядали цю саму конфігурацію на iPad, комірки не були б зрозумілі. Осередки потрібно буде встановити для програмного очищення для iPad.


Я бачу цю проблему для додатків, створених за допомогою Xcode 6.4 та працює на iOS 9.2. Я встановив фонові кольори моїх (статичних) таблиць для очищення в програмі Interface Builder, і вони з'явилися чіткими на iPhone, але на iPad вони були білими, поки я не встановив кольори фону комірок для очищення в -viewDidLoad:методі мого контролера перегляду .
Грег

1

спробував налаштувати backgroundColor та View для таблиці, не пощастило (Xcode 5 iOS7.1 iPad simulator), виглядав нормально для iPhone, але світло-сірий колір фону на iPad ...

робота з backgroundColor для самої клітини виправила це для мене на iOS 7.1 4/2014

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}


0

Якщо ваша програма орієнтована як на iPhone, так і на iPad, ви можете зробити це так:

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

Зауважте, що аллок TableView не має автоматичного випуску для ARC.


0

Якщо ви додаєте UIViewController до іншого UIViewController, вам також потрібно встановити тло перегляду на ClearColor, крім UITableView, інакше ви отримаєте білий фон замість світло-сірого.

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

0
  • Моделювання iPad 2
  • Запуск iOS 7.1 - 8.3
  • Побудований з XCode 6.3

Жоден із перерахованих вище не працював для мого UIViewController-> UITableView, вказаного за допомогою одного XIB. Що було для роботи, це переміщення всього налаштування на дошку розкадри та встановлення кольору фону за допомогою інспектора IB.


0

У мене теж з’явилася така проблема. UITableViewКолір фону буде завжди , groupTableViewBackgroundColorнезалежно від того , що я встановив.

Симптом схожий на цю проблему - UITableView скидає колір тла до появи

Після того як я встановив колір фону у initфункції, він є правильним. В viewDidLoadі на viewWillAppearетапі це правильно. Однак у viewDidAppearкольорі фону повертається до стандартного кольору.

Зараз прийнята відповідь не працює.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

Ось моє рішення. Просто встановіть колір фону tableView у viewDidLoadфункції, а не initабо viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.