UITableView fundo claro

90

Sei que o iOS 7 não foi lançado oficialmente e não devemos discutir isso, MAS estou ficando louco tentando descobrir esse problema. No iOS 6, minha visão da mesa era transparente e parecia ótima. Primeira vez executando o iOS 7, e o fundo é branco.

Eu tentei fazer a tabela backgroundColor, cor da célula etc etc para UIColor clearColor, mas não houve alteração.

Como consertar esse problema?

a mesa

Teddy13
fonte
1
Tentou colocar a mesa backgroundViewem uma mesa limpa?
Desfazer
Você poderia mostrar o código onde está definindo a cor de fundo? E a visão dos pais? Talvez o fundo da visualização da mesa esteja claro, mas o pai não é?
sooper
Notei a mesma coisa, mas quando instalei o mesmo aplicativo anterior à minha versão atual para iOS 7.0, isso não estava acontecendo. Esse problema está no xCode5.0 então?
Totumus Maximus

Respostas:

123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

em cellForRowAtIndexPath

Além disso, certifique-se de que seu tableview realmente tenha um fundo transparente (no storyboard): insira a descrição da imagem aqui

slamor
fonte
George, adicione esse código dentro do método - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings
1
Para os casos, se você realmente precisa selectedBackgroundView, você pode colocar o seguinte em cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; ou mesmo em awakeFromNib: self.selectedBackgroundView = ... Observe que: self.backgroundColor = [UIColor clearColor]; não funciona em awakeFromNib em iOS7. Mas: cell.backgroundColor = [UIColor clearColor]; funciona corretamente apenas em cellForRowAtIndexPath para iOS 7.0
slamor
11
Só precisa adicionar a linha: cell.backgroundColor = [UIColor clearColor];
evya
Isso funciona como charme cell.backgroundColor = [UIColor clearColor];
bpolat
Como fazer isso no Swift?
Qadir Hussain
58

Põe isto:

cell.backgroundColor = [UIColor clearColor];

Nesta secção:

cellForRowAtIndexPath
Maximus Vermillion
fonte
1
No iOS 6, é suficiente definir o backgroundViewpara uma visualização vazia, mas esse código adicional é necessário para o iOS 7.
Kevin Borders,
25

Tente definir backgroundView como nulo primeiro.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Não tenho certeza se isso é uma mudança na documentação com iOS7 ou sempre esteve lá e apenas não afetou a cor de fundo, mas de acordo com a Referência de classe UITableView @property backgroundView

"Você deve definir esta propriedade como nulo para definir a cor de fundo da visualização da tabela."

editar: sintaxe de código corrigida

dandan
fonte
25

Isso foi respondido, mas incorretamente de várias maneiras.

Você precisa implementar o método de delegado abaixo:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Você não pode colocar a correção em cellForRowAtIndexPath porque isso ocorre depois que a célula é renderizada e piscará um fundo branco antes que o fundo seja definido como claro (em dispositivos mais lentos).

Use este método de delegação e seus problemas serão resolvidos!

nab
fonte
1
Sim. Para iOS 7, esta é a maneira de limpar o fundo. Todas as outras sugestões acima podem não funcionar.
girish_vr
15

Na verdade, o local oficialmente correto para alterar a cor de fundo da célula é diferente de acordo com a documentação ( Referência de classe UITableViewCell ):

Quer você use uma célula predefinida ou personalizada, pode alterar o fundo da célula usando a propriedade backgroundView ou alterando a propriedade backgroundColor herdada. No iOS 7, as células têm um fundo branco por padrão; nas versões anteriores do iOS, as células herdam a cor de fundo da visualização da tabela envolvente. Se você deseja alterar a cor de fundo de uma célula, faça-o em tableView: willDisplayCell: forRowAtIndexPath: método do seu delegado de visualização de tabela.

asdusd
fonte
Estou tentando fazer isso, mas todas as primeiras células mostradas têm um fundo branco. Se eu criar novas células rolando, elas terão o fundo transparente que desejo. Não tenho certeza do que mais tentar…
David Dunham,
Não importa, parece ser um problema de tempo. Eu estava fazendo coisas em awakeFromNib, que era muito cedo.
David Dunham,
7

rápido 3, 4 e 5

cell.backgroundColor = UIColor.clear
Jamal alayq
fonte
6

Este é um problema bastante frustrante. Esta é minha solução atual:

Adicione isso à sua UITableViewCellsubclasse.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
Berk
fonte
Oh Deus. Obrigado. Salvei minha noite. Sua resposta deveria ter sido aceita.
Michal Shatz
5

Isso funcionou para mim no iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

e então em cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
DevC
fonte
4

tente este trecho de código

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
fonte
4

Isso só funcionou para mim quando editei uma cor de fundo clara para cada célula e uma cor clara para a própria tabela. AMBOS PROGRAMÁTICAMENTE

para definir a cor clara da mesa:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

para definir a cor das células:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}
SoliQuiD
fonte
3

Uma coisa legal. A cor padrão do UITable parece ser branco (não sei por quê)

Fundo branco

Mas é melhor mudar isso.

Paul Brewczynski
fonte
Perfeito! Essa era a paz que faltava. Nenhuma linha adicional de código necessária!
Morpheus78
3

Primeiro set

tableView.backgroundColor = [UIColor clearColor];

Segundo set

tableCell.backgroundColor = [UIColor clearColor];
Fantasyczl
fonte
3

criar IB Outlet para visualização de tabela @IBOutlet fraco var yourTable: UITableView!

em vista de carga

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

se você quiser limpar a cor da célula, também faça isso em

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}
Veenaay Pawar
fonte
2

Em meu aplicativo, tive que definir a cor da backgroundColorminha UITableViewCellclasse [UIColor clearColor]quando atualizei para iOS 7.

Arthur Dexter
fonte
2

Experimentar

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

E

cell.backgroundColor = [UIColor clearColor];
Jorgy
fonte
2

No meu caso, a célula foi criada usando um xib. parece que o construtor de interface em xcode5 tem problemas para definir clearColor para cell.backgroundColor.

Tudo que eu precisava fazer era definir

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}
Ben G
fonte
controle atinge o fim da função não vazia
ropo
2

Basta selecionar Clear Color em View Background para a tabela e também para a célula.

Walter Barlet
fonte
2

rápido 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
fonte
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
fonte
0

Conjunto

tableView.backgroundColor = [UIColor clearColor];

em viewDidLoad.

se não estiver funcionando, tente:

tableView.backgroundView = nil;
Lal Krishna
fonte
0

In swift 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
Patricio Bravo
fonte