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


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


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

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


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!


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.


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,


6

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

Adicione isso à sua UITableViewCellsubclasse.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

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

4

tente este trecho de código

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

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
}

3

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

Fundo branco

Mas é melhor mudar isso.


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

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() 

}

2

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


2

Experimentar

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

E

cell.backgroundColor = [UIColor clearColor];

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

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.


2

rápido 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Conjunto

tableView.backgroundColor = [UIColor clearColor];

em viewDidLoad.

se não estiver funcionando, tente:

tableView.backgroundView = nil;

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
}
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.