UITableView backgroundColor всегда серый на iPad

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

Шаги для воспроизведения:

  • Создайте новый навигационный проект.
  • Откройте RootViewController.xib и установите стиль представления таблицы в "Группировка".
  • Добавьте этот ответчик в RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  • Выберите Simulator SDK 3.2, создайте и запустите.
  • Вы получите черный фон (устройство и симулятор).
  • Выберите цель в дереве проекта.
  • Нажмите "Проект": обновите текущую цель для iPad.
  • Сборка и запуск.
  • Вы получите светло-серый фон.
  • Верните стиль табличного представления в Plain, и вы получите черный фон.

Спасибо за вашу помощь!

Ответ 1

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

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

Ответ 2

Большое спасибо за это решение. Я применил это свойство UITableView с IBOutlet в UIViewController и хорошо работает как:

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

Ответ 3

На 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];
}

Ответ 4

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

Например, на раскадровке iPhone вы можете установить ячейку для очистки цвета, а затем установить фоновое изображение таблицы программно для прозрачной таблицы с фоновым изображением. Однако, если вы хотите просмотреть эту же конфигурацию на iPad, ячейки не будут ясными. Ячейкам необходимо будет установить программно для iPad.

Ответ 5

попробовал настройку 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;

}

Ответ 6

Если ваше приложение предназначено для 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.

Ответ 7

Если вы добавляете UIViewController в другой UIViewController, вам также нужно установить фон представления clearColor в дополнение к UITableView, иначе вы получите белый фон вместо светло-серого.

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

Ответ 8

  • Имитация iPad 2
  • Запуск iOS с 7.1 по 8.3
  • Построено из XCode 6.3

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