Eu implementei uma classe de célula de exibição de tabela personalizada que herda UITableViewCell
. A tableview contém uma imagem de plano de fundo, portanto, quero que o plano de fundo da célula seja transparente. Parece ótimo antes do iOS7.
No entanto, no iOS7, a célula é sempre mostrada com um fundo branco.
Mesmo para o Xcode7, 2015, há um bug no storyboard : você precisa definir a cor de fundo de uma célula no código.
ios
objective-c
cocoa-touch
ios7
Kjuly
fonte
fonte
Respostas:
As Apple DOC said (UITableViewCell Class Reference):
Portanto, para o meu caso, para mostrar células com fundo transparente, basta implementar o método delegado no controlador de exibição de tabela, como abaixo:
Nota : Como o @null disse: "... parece haver um bug no construtor de interfaces ..." , não tenho muita certeza se ele possui o bug, mas parece que o comentário dele recebeu vários votos. Portanto, pode haver algo errado se você usar o IB. :)
fonte
tableView:cellForRowAtIndexPath:
métodoEu investiguei um pouco e descobri que o backgroundColor da célula é definido pelo sistema de Aparência. Portanto, se todas as células em seu aplicativo tiverem um plano de fundo claro, a solução mais fácil seria:
E mesmo que tenham um plano de fundo diferente, a cor clara parece ser a mais conveniente como a padrão.
fonte
UITableViewCell
s, so it wasn't an issue for me to provide a superclass with an initializer to set the BG color toclearColor
, but guess what? That didn't work... I mean, WHY, APPLE?Escreva isso no método cellForRowAtIndexPath antes da célula de retorno;
fonte
A cor de fundo padrão de um
UITableViewCell
no iOS 7 é branca.Você precisa definir a
backgroundColor
propriedade em algum lugar do seu código. Por exemplo, defina-o após a criação da célula.fonte
Na verdade, descobri que o problema surgiu da cor de fundo do UITableView que não estava sendo definida como clara. Se você alterar a cor de fundo do UITableViewCell para clara e continuar vendo branco, verifique se a cor de fundo do UITableView está definida como clara (ou o que você quiser).
Na Swift
fonte
Este é definitivamente um bug do iOS. No iOS 8, definir a cor de fundo
Interface Builder
funciona bem no iPhone, mas no iPad é semprewhiteColor
. Para corrigi-lo, nacellForIndexPath
mensagem da fonte de dados, coloque isso em:cell.backgroundColor = cell.backgroundColor
E vai funcionar. É exatamente por isso que eu disse que é um bug, já que o código em si é bastante besteira * t, mas funciona.
fonte
Pode ser que o seu UITableViewCell esteja selecionado por padrão. Você pode confirmar isso usando o novo depurador visual do Xcode 6s (ou descobrir exatamente qual visualização está causando a exibição dessa célula branca).
Curiosamente, depois de saber isso .. definir a cor de plano de fundo da célula selecionada para limpar ainda não funcionou .. fazendo mais algumas pesquisas, acontece que eu apenas tive que modificar o estilo de seleção ao criar esta célula personalizada:
fonte
Descobri que nenhuma das opções acima funcionava no XCode 5.1.1, iOS 7.1.
Se você estiver usando o Interface Builder com células de protótipo, selecione a célula de protótipo e, no seletor de atributos na seção Exibir, altere o padrão do formulário Segundo plano para Limpar cor:
Isso parece funcionar bem. Nenhuma das alterações de código acima também são necessárias - esta é uma solução IB pura.
fonte
A resposta aceita não resolveu o problema para mim. Eu tive que fazer isso:
No método cellForRowAtIndexPath da classe de fonte de dados da tabela:
fonte
cell = [tableView dequeueReusableCellWithIdentifier:<#Reuse ID#> forIndexPath:indexPath]
. Nas versões anteriores, você descarta o argumento indexPath e, em seguida, testa o valor nulo, instanciandoinitWithStyle:reuseIdentifier
conforme seu snippet de código no caso nulo.Para mim definição
cell.backgroundColor = cell.contentView.backgroundColor;
seja emtableView:willDisplayCell:forRowAtIndexPath:
outableView:cell:forRowAtIndexPath:
fez o trabalho.Isso ocorre porque eu defino a cor de fundo do contentView no Interface Builder, conforme desejado.
fonte
Ao adicionar objetos de interface do usuário a uma célula, o Xcode 5 / IOS 7 adiciona uma nova "Visualização de Conteúdo", que será a super visão de todos os elementos na célula. Para definir a cor de plano de fundo da célula, defina a cor de plano de fundo dessa exibição de conteúdo. As soluções acima não funcionaram para mim, mas esta funcionou bem para mim.
fonte
Solução Swift 1.2:
Basta adicionar uma definição explícita para a cor de fundo da sua célula da seguinte forma:
fonte
Teve um problema semelhante, teve que
adicione isso ao código para corrigi-lo
fonte
Você também pode usar o código de cores para tornar lucrativo o seu UITableView Cell.
Este é o código para aplicar o método do código de cores:
fonte