Novo no iOS 8, você pode obter células de visualização de tabela 100% dinâmicas simplesmente definindo a altura estimada da linha e, em seguida, faça o layout de seus elementos na célula usando o Layout automático. Se o conteúdo aumentar de altura, a célula também aumentará de altura. Isso é extremamente útil, e estou me perguntando se o mesmo feito pode ser realizado para cabeçalhos de seção em uma visualização de tabela?
Pode-se, por exemplo, criar um UIView
em tableView:viewForHeaderInSection:
, adicionar um UILabel
subexibição, especificar restrições de layout automático para a etiqueta contra a visão, e ter o aumento de vista de altura para caber o conteúdo do rótulo, sem ter que implementar tableView:heightForHeaderInSection:
?
A documentação para viewForHeaderInSection
estados: "Este método só funciona corretamente quando tableView: heightForHeaderInSection: também é implementado." Não soube se alguma coisa mudou no iOS 8.
Se não for possível fazer isso, qual é a melhor maneira de imitar esse comportamento?
fonte
UITableViewAutomaticDimension
dizer "se você retornar esta constante emtableView:heightForHeaderInSection:
outableView:heightForFooterInSection:
,UITableView
usa uma altura que se ajusta ao valor retornado detableView:titleForHeaderInSection:
outableView:titleForFooterInSection:
(se o título não fornil
)."estimatedSectionHeaderHeight
outableView:estimatedHeightForHeaderInSection:
ANDsectionHeaderHeight
outableView:heightForHeaderInSection:
. Além disso, se estiver usando os métodos de delegado, você deve retornar um valor maior que 1,00 para a estimativa (comportamento completamente não documentado), caso contrário, o delegado para altura NÃO será chamado e a altura do cabeçalho de exibição de tabela padrão será usada.Isso pode ser feito definindo (ou retornando) a
estimatedSectionHeaderHeight
visualização na sua mesa.Se o cabeçalho da seção estiver sobrepondo as células após a configuração
estimatedSectionHeaderHeight
, certifique-se de usar umestimatedRowHeight
também.(Estou adicionando esta resposta porque o segundo parágrafo contém uma resposta para um problema que pode ser encontrado depois de ler todos os comentários que alguns podem ignorar.)
fonte
estimatedRowHeight
isso funciona como um charme :)Fiquei preso no mesmo problema em que a plataforma estava obtendo altura zero até e a menos que eu forneça uma altura fixa no delegado para
heighForHeaderInSection
.Tentei várias soluções, que incluem
Mas nada funcionou. Meu celular também estava usando autolayouts adequados. As linhas estavam mudando sua altura dinamicamente usando o código a seguir, mas o cabeçalho da seção não.
A correção é extremamente simples e estranha também, mas eu tive que implementar os métodos delegados em vez de um código de linha para o
estimatedSectionHeaderHeight
esectionHeaderHeight
que funciona da seguinte maneira para o meu caso.fonte
Swift 4+
trabalhando (testado 100%)
Se você precisar de seção e linha com altura dinâmica baseada no conteúdo, poderá usar o código abaixo:
Em viewDidLoad () escreva estas linhas:
Agora definimos a altura da linha e a altura da seção usando os métodos UITableView Delegate:
fonte
eu tentei
mas não dimensionou corretamente o cabeçalho com rótulo multilinha. Adicionei isso para resolver meu problema:
fonte
tableView:estimatedHeightForHeaderInSection
e emtableView:heightForHeaderInSection
vez de definir em viewDidLoad.estimatedSectionHeaderHeight
só é necessária abaixo do iOS 11No meu caso:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.definido no storyboard não funciona .
substituir
heightForHeaderInSection
funcionou .ambiente de teste:
fonte
Sim, funciona para mim. Tenho que fazer mais alterações conforme abaixo:
fonte
Eu modifiquei iuriimoz resposta . Acabou de substituir o método viewWillAppear:
Adicione também tableView.layoutIfNeeded () ao
Para iOS 10
tem efeito de animação "fade" em viewWillAppear para mim
fonte