UITableView backgroundColor всегда серый на iPad - PullRequest
128 голосов
/ 22 апреля 2010

Когда я устанавливаю 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: обновить текущую цель для iPad.
  8. Сборка и запуск.
  9. Вы получите светло-серый фон.
  10. Верните стиль табличного представления в Обычный, и вы получите черный фон.

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

Ответы [ 9 ]

245 голосов
/ 22 апреля 2010

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

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
30 голосов
/ 15 июня 2010

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

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent
6 голосов
/ 20 апреля 2012

На 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];
}
2 голосов
/ 08 декабря 2014

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

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

1 голос
/ 02 апреля 2014

попробовал установить 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
        // /2208430/uitableview-backgroundcolor-vsegda-seryi-na-ipad

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

}

0 голосов
/ 26 ноября 2018

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

Симптом похож на эту проблему - UITableView сбрасывает свой цвет фона, прежде чем появится вид1008 * После того, как я установил цвет фона в функции 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];
}
0 голосов
/ 16 апреля 2015
  • Имитация iPad 2
  • Запуск iOS с 7.1 по 8.3
  • Построен из XCode 6.3

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

0 голосов
/ 12 июля 2012

Если вы добавляете 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 голосов
/ 14 июня 2012

Если ваше приложение предназначено для 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 alloc нет автоматического выпуска для ARC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...