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.