O layout automático é ignorado no UITableViewCell personalizado


96

Apesar de ter definido restrições para todos os elementos, incluindo as verticais necessárias para que a célula calcule sua altura, o layout automático parece ser ignorado: todas as células são comprimidas.

Aqui está uma captura de tela do resultado e das restrições no storyboard. insira a descrição da imagem aqui

insira a descrição da imagem aqui

No VC que contém o tableView, aqui está o código em viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Comentar a segunda linha fornece células com altura de 120,0, mas o Autolayout também é ignorado.

obrigado


Atualizar

Para simplificar a interface, deixei um único rótulo com, como restrições:

  • Espaço principal para superview
  • Espaço superior para supervisualizar
  • Largura e altura fixas (100 e 100)
  • Espaço inferior até a margem do contêiner para garantir que a célula tenha todas as restrições verticais para determinar sua altura

E com essa interface simplificada, o layout automático ainda não é levado em consideração, o que me indica que o problema não veio de restrições mal definidas.

No Inspetor de tamanho, a altura da linha é definida em 120 e Personalizado está marcado. A célula tem a classe personalizada certa, o identificador de reutilização da célula está correto.


Atualização: solução encontrada

Este foi um erro simples, veja minha resposta abaixo.


Verifique seu terminal de depuração - há algum registro NSLayoutConstraint sugerindo que algo não está funcionando como esperado?
Matthew Hallatt de

Nada aparece no terminal de depuração @MatthewHallatt, obrigado.
Kqtr de

@Kqtr tente comentar essas duas linhas e execute-o normalmente uma vez para verificar se há alguma alteração?
Tushar Sharma de

@TusharSharma Comentar as duas linhas tem o mesmo efeito que comentar apenas a linha rowHeight: a célula tem uma altura de 120,0, mas o layout automático não funciona.
Kqtr de

1
O construtor de interface mostra quaisquer restrições como ausentes ou ambíguas? Verifique se há um pequeno ponto de exclamação amarelo ou vermelho.
Matthew Hallatt de

Respostas:


253

O layout automático foi ignorado porque a célula de protótipo E o UIView da célula receberam a classe de célula personalizada em IB.

Definir o UIView de volta para a classe UIView resolveu o problema.

apenas para ser über claro


2
Fiquei preso nesse problema por horas e isso resolve, obrigado!
candidev

Perdi quase um dia inteiro até chegar aqui ... Mil graças a você.
Renascente em

Estou tendo esse problema mesmo sem nenhuma classe personalizada para o. Content ViewAlguém mais encontrou isso?
Destiny Faith

Uau, você é um salva-vidas!
Bassem Qoulta

-3

Acho que o problema é que você está implementando:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Você precisa remover esta função para que o tableview calcule sua altura automática para as células.


Obrigado, infelizmente não o substituo: na verdade, nem mesmo tenho um delegado para este tableView, apenas uma fonte de dados.
Kqtr de

Você definiu as restrições de visualização de texto para todas as bordas da célula? E você desabilitou a rolagem do textView?
Jaafar Barek de

O rótulo de várias linhas (0 linhas) tem restrições para 1) espaçamento vertical com o número à sua esquerda 2) espaço superior para superview 3) espaço posterior para superview e 4) espaço inferior com o rótulo Asked By.
Kqtr de
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.