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.