Estou tentando ajustar a altura da célula para uma das células na minha exibição de tabela. Estou ajustando o tamanho da configuração "altura da linha" dentro do "inspetor de tamanho" da célula em questão. Quando executo o aplicativo no meu iPhone, a célula tem o tamanho padrão definido no "tamanho da linha" na exibição da tabela.
Se eu alterar o "tamanho da linha" da exibição da tabela, o tamanho de todas as células será alterado. Não quero fazer isso, pois quero um tamanho personalizado apenas para uma célula. Eu já vi muitas postagens com uma solução programática para o problema, mas eu preferiria fazê-lo através do storyboard, se isso for possível.
fonte
UITableView
conteúdo deDynamic Prototypes
paraStatic Cells
, eu fiz isso e todo o meu projeto explodiu ... quase fui morto.Se você usar UITableViewController, implemente este método:
Na função de uma linha, você pode escolher Altura. Por exemplo,
Neste exemplo, a altura da primeira linha é de 100 pixels e as demais são de 60 pixels.
Espero que este possa ajudá-lo.
fonte
Para células dinâmicas,
rowHeight
definirUITableView
sempre substitui as células individuaisrowHeight
.Esse comportamento é, na IMO, um bug. Sempre que você precisar gerenciar sua interface do usuário em dois lugares, ela estará sujeita a erros. Por exemplo, se você alterar o tamanho da sua célula no storyboard, lembre-se de alterá-los
heightForRowAtIndexPath:
também. Até a Apple corrigir o erro, a melhor solução atual é substituirheightForRowAtIndexPath:
, mas use as células de protótipo reais do storyboard para determinar a altura em vez de usar números mágicos . Aqui está um exemplo:Isso garantirá que quaisquer alterações nas alturas das células do seu protótipo sejam selecionadas automaticamente no tempo de execução e você só precisará gerenciar sua interface do usuário em um só lugar: o storyboard.
fonte
Eu construí o código com as várias respostas / comentários para que isso funcione para storyboards que usam células protótipo.
Este código:
Obrigado ao Answerbot, Brennan e lensovet.
fonte
Na verdade, existem dois lugares em que você precisa alterar a altura da linha, primeiro a célula (você já a alterou) e agora selecione a Visualização da tabela e verifique o Inspetor de tamanho
fonte
Eu acho que é um bug.
Tente ajustar a altura não pelo inspetor do Utility, mas pelo mouse diretamente no storyboard.
Eu resolvi esse problema com esse método.
fonte
Se você estiver usando rápido, use assim. Não use o storyboard para selecionar a altura da linha. Defina programaticamente a altura da linha da tabela assim,
fonte
cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Você pode obter a altura do UITableviewCell (no UITableviewController - células estáticas) no storyboard com a ajuda das seguintes linhas.
fonte
Abra o storyboard na visualização XML e tente editar o
rowHeight
atributo do elemento desejado.Funcionou para mim quando tentei definir rowHeight personalizado para minha linha com protótipo. Não está funcionando via inspetor, mas via XML funciona.
fonte
Você pode usar o protótipo
cells
com um costumeheight
e, em seguida, chamarcellForRowAtIndexPath:
e retornar seuframe.height
.:.fonte
Se você deseja definir uma altura de linha estática, pode fazer algo assim:
fonte
Eu tenho lutado recentemente com isso. Meu problema foi que as soluções postadas acima usando o
heightForRowAtIndexPath:
método funcionariam para o iOS 7.1 no Simulador, mas depois estragaram completamente os resultados simplesmente mudando para o iOS 8.1.Comecei a ler mais sobre células de auto-dimensionamento (introduzidas no iOS 8, leia aqui ). Era evidente que o uso de
UITableViewAutomaticDimension
ajudaria no iOS 8. Tentei usar essa técnica e excluí o uso deheightForRowAtIndexPath:
e voila, estava funcionando perfeitamente no iOS 8 agora. Mas o iOS 7 não estava. O que eu devo fazer? Eu precisavaheightForRowAtIndexPath:
do iOS 7 e não do iOS 8.Aqui está a minha solução (aparada por uma questão de brevidade) que empresta da resposta @ JosephphH postada acima:
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") é realmente de um conjunto de definições de macro que estou usando e que encontrei em algum lugar (muito útil). Eles são definidos como:
fonte
O mesmo problema ocorreu ao trabalhar no XCode 9 usando o Swift 4 .
Adicione AutoLayout para os elementos da interface do usuário dentro da célula e a altura da linha da célula personalizada funcionará adequadamente, conforme especificado.
fonte
Para células dinâmicas, o rowHeight definido no UITableView sempre substitui o rowHeight das células individuais. Apenas calcule a altura dinâmica se o conteúdo estiver dentro da linha.
fonte
A única solução real que pude encontrar é esta
Isso funciona e permite não ter uma opção horrível / se duplicar a lógica já no StoryBoard. Não tenho certeza sobre o desempenho, mas acho que ao chegar na
cellForRow:
célula já sendo inicializado, é tão rápido. É claro que provavelmente há danos colaterais aqui, mas parece que funciona bem para mim aqui.Também publiquei isso aqui: https://devforums.apple.com/message/772464
Edição: Ortwin Gentz me lembrou que
heightForRowAtIndexPath:
será chamado para todas as células do TableView, não apenas as visíveis. Parece lógico, já que o iOS precisa saber a altura total para poder mostrar as barras de rolagem corretas. Isso significa que provavelmente está bem em TableViews pequenos (como 20 células), mas esqueça isso em um TableView de 1000 células.Além disso, o truque anterior com XML: O mesmo que o primeiro comentário para mim. O valor correto já estava lá.
fonte
Adicionado como comentário, mas postando como resposta para visibilidade:
Parece haver também um problema se você configurar inicialmente uma exibição de tabela como "células estáticas" e alterá-la para "protótipos dinâmicos". Eu tive um problema em que até o método delegado
heightForRowAtIndexPath
estava sendo ignorado. Eu o resolvi editando diretamente o XML do storyboard, e finalmente reconstruí a cena do storyboard do zero, usando protótipos dinâmicos desde o início.fonte
Como não encontrei nenhuma solução para esse problema através do Interface Builder, decidi postar uma solução programática para o problema no Swift usando duas células dinâmicas , mesmo que a pergunta inicial pedisse uma solução através do Interface Builder. Independentemente, acho que poderia ser útil para a comunidade Stack Overflow:
fonte
Outra coisa que você pode fazer é acessar o Esboço do documento, selecionar a visualização da tabela em que a célula do seu protótipo está aninhada. Em seguida, no Inspetor de tamanhos, altere a altura da linha da visualização da tabela para o valor desejado e desmarque a caixa Automático.
fonte