UITableView backgroundColor sempre cinza no iPad


128

Quando defino o backgroundColorpara o meu, UITableViewele funciona bem no iPhone (dispositivo e simulador), mas NÃO no simulador do iPad. Em vez disso, recebo um plano de fundo cinza claro para qualquer cor definida, incluindogroupTableViewBackgroundColor .

Passos para reproduzir:

  1. Crie um novo projeto baseado em navegação.
  2. Abra RootViewController.xib e defina o estilo de exibição de tabela como "Agrupado".
  3. Adicione esta resposta ao RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Selecione Simulator SDK 3.2, crie e execute.
  5. Você receberá um fundo preto (dispositivo e simulador).
  6. Selecione seu destino na árvore do projeto.
  7. Clique em Projeto: Atualize o destino atual para o iPad.
  8. Construa e execute.
  9. Você obterá um fundo cinza claro.
  10. Reverta o estilo de exibição de tabela para Simples e você obterá um fundo preto.

Obrigado pela ajuda!


2
Ah, agora iPhone e iPad alinhado novamente aqui em iOS6 :-)
Gerd

3
Bravo por usar os termos raramente usados ​​"Passos para reproduzir"! :-p
Constantino Tsarouhas

Respostas:


245

Experimente um destes.

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

3
Não sei se existem efeitos colaterais, mas funciona! Obrigado! self.tableView.backgroundView = nil;
precisa saber é o seguinte

30
MUITO MUITO IMPORTANTE: Isso funciona apenas com o SDK 3.2. Para compatibilidade com versões anteriores com 3.1.3. e antes, você deve verificar se a exibição da tabela responde à propriedade backgroundView: if ([self.tableView responde toToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; caso contrário, seu aplicativo falhará e sairá abruptamente, você pode confiar em mim!
Rpmidon

1
Sim, tentei a solução acima e funcionou para mim. Alguém pode me dizer qual é esse problema, na verdade. Por que quando executamos o aplicativo, ele fica acinzentado?
Naveen

Por favor, alguém nos diga por que isso é necessário para resolver este problema?
precisa saber é

porque claramente o novo ios permite que você coloque uma visão de fundo. Por que sua configuração para uma visão cinza é apenas um problema que a Apple apresentou. muito estranho, muito burro. Mas, novamente a sua cada dia que eu encontrar algo estranho e mudo, enquanto a codificação para iOS
The Lazy Coder

30

Muito obrigado por esta solução. Eu apliquei isso em uma propriedade UITableView com IBOutlet em um UIViewController e funciona bem como:

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

não há necessidade da linha do meio [panelTable setBackgroundView: [[[UIView atribuição] init] autor] liberação]]];
NIKHIL

4
Fogo Congelante: na verdade existe. Sem ele, você obtém artefatos de desenho estranhos nas bordas das células da tabela.
Hilton Campbell

6

No iPad, a backgroundViewpropriedade parece ser usada para criar a cor de fundo cinza das tabelas agrupadas. Portanto, para alterar a cor de plano de fundo das tabelas agrupadas no iPad, deve-se nilexcluir a backgroundViewpropriedade e, em seguida, definir a backgroundColorvisualização da tabela desejada.

- (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];
}

Sim, essa verificação deve ser adicionada para oferecer suporte a iOSs anteriores.
Karim

2

Eu acho que vale a pena notar que, a partir do Xcode 6.1 e iOS 8.1, especificamente para iPad (se você também deseja definir o plano de fundo da célula), parece que você deve definir o plano de fundo da tabela E o plano de fundo da célula.

Por exemplo, em um storyboard do iPhone, você pode definir uma célula para limpar a cor e definir a imagem de plano de fundo da tabela programaticamente para uma tabela transparente com imagem de plano de fundo. No entanto, se você visualizasse essa mesma configuração no iPad, as células não ficariam claras. As células precisarão ser configuradas para limpar programaticamente para o iPad.


Estou vendo esse problema nos aplicativos criados com o Xcode 6.4 e em execução no iOS 9.2. Defino as cores de fundo das minhas células (estáticas) de exibição de tabela para limpar no Interface Builder e elas aparecem claras no iPhone, mas no iPad elas estavam brancas até eu definir as cores de fundo das células para limpar no -viewDidLoad:método do meu controlador de exibição .
585 Greg Greg

1

tentei configurar backgroundColor e View para a tabela, não teve sorte (simulador de iPad Xcode 5 iOS7.1), parecia bom para o iPhone, mas cor de fundo cinza claro no iPad ...

trabalhar com backgroundColor para a própria célula corrigiu isso para mim no 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

Se seu aplicativo tiver como alvo o iPhone e o iPad, você poderá fazer o seguinte:

[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

Observe que a alocação do TableView não possui liberação automática para o ARC.


0

Se você estiver adicionando um UIViewController a outro UIViewController, também precisará definir o plano de fundo da sua visão como clearColor, além do UITableView, caso contrário, você terá um plano de fundo branco em vez de cinza claro.

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

0
  • Simulando o iPad 2
  • Executando iOS 7.1 a 8.3
  • Construído a partir do XCode 6.3

Nenhuma das opções acima funcionou para o meu UIViewController-> UITableView especificado usando um único XIB. O que funcionou foi mover toda a configuração para um Storyboard e definir a cor de fundo usando o inspetor IB.


0

Eu também tenho esse tipo de problema. A UITableViewcor de fundo será sempregroupTableViewBackgroundColor independentemente do que eu definir.

O sintoma é o seguinte: o UITableView está redefinindo sua cor de plano de fundo antes que a exibição apareça

Depois de definir a cor do plano de fundo na initfunção, ela está correta. Em viewDidLoade viewWillAppearestágio, é correto. No entanto, emviewDidAppear , a cor do plano de fundo é redefinida para a cor padrão.

A resposta aceita não funciona agora.

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

Aqui está a minha solução. Basta definir a cor de fundo do tableView emviewDidLoad função vez de initou viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.