UITableView backgroundColor всегда серый на 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 для 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: if ([self.tableView RespondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; в противном случае ваше приложение выйдет из строя и выйдет из строя, вы можете мне доверять!
rjobidon

1
да, я попробовал вышеуказанное решение, и оно сработало для меня. Может ли кто-нибудь сказать мне, что это за проблема на самом деле. Почему, когда мы запускаем приложение, оно неактивно?
Naveen

Подскажите, пожалуйста, зачем это нужно для решения этой проблемы?
mask8

потому что очевидно, что новый ios позволяет вам использовать фоновый режим. Почему он настроен на какой-то серый вид - это просто проблема, которую представила Apple. очень странно, очень глупо. Но опять же, каждый день я сталкиваюсь с чем-то странным и глупым во время кодирования для iOS
Lazy 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]];
НИХИЛ

4
Freezing Fire: на самом деле существует. Без него вы получите странные артефакты рисования в границах ячеек таблицы.
Hilton Campbell,

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 вы можете установить для ячейки чистый цвет, а затем программно установить фоновое изображение таблицы для прозрачной таблицы с фоновым изображением. Однако, если бы вы просматривали ту же конфигурацию на iPad, ячейки не были бы четкими. Ячейки необходимо настроить на программную очистку для iPad.


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

1

попытался установить backgroundColor и View для таблицы, не повезло (симулятор iPad Xcode 5 iOS7.1), выглядел нормально для 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.