Estou trabalhando nisso há cerca de 2 dias, então pensei em compartilhar meus aprendizados com você.
A questão é: É possível diminuir a largura de uma célula em um UITableView agrupado?
A resposta é não.
Mas existem duas maneiras de contornar esse problema.
Solução # 1: Uma tabela mais fina É possível alterar o quadro de tableView, para que a tabela fique menor. Isso resultará em UITableView renderizando a célula interna com a largura reduzida.
Uma solução para isso pode ser assim:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Solução # 2: tendo células renderizadas por imagens
Esta solução é descrita aqui: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Eu espero que esta informação seja útil pra você. Levei cerca de 2 dias para tentar várias possibilidades. Isso é o que sobrou.
fonte
Respostas:
Uma maneira melhor e mais limpa de conseguir isso é subclassificar UITableViewCell e substituir seu
-setFrame:
método desta forma:Por que está melhor? Porque os outros dois são piores.
Ajuste a largura da visualização da mesa em
-viewWillAppear:
Em primeiro lugar, isso não é confiável, o superview ou o controlador de visualização pai pode ajustar o quadro de visualização da tabela mais tarde
-viewWillAppear:
é chamado. Claro, você pode criar uma subclasse e sobrescrever-setFrame:
para seu UITableView da mesma forma que faço aqui para UITableViewCells. No entanto, criar subclasses de UITableViewCells é uma maneira muito comum, leve e da Apple.Em segundo lugar, se seu UITableView tem backgroundView, você não quer que seu backgroundView seja estreitado. Manter a largura de backgroundView enquanto reduz a largura de UITableView não é um trabalho trivial, sem mencionar que expandir subvisualizações além de sua supervisão não é uma coisa muito elegante de se fazer em primeiro lugar.
Renderização de célula personalizada para fingir uma largura mais estreita
Para fazer isso, você deve preparar imagens de fundo especiais com margens horizontais e fazer o layout de subvisualizações das células para acomodar as margens. Em comparação, se você simplesmente ajustar a largura de toda a célula, o redimensionamento automático fará todo o trabalho para você.
fonte
Para fazer isso no Swift, que não fornece métodos para definir variáveis, você terá que substituir o setter para
frame
. Postado originalmente (pelo menos onde o encontrei) aquifonte
Se nada funcionar, você pode tentar isso
Torne a cor de fundo da célula uma cor clara e coloque uma imagem da célula com o tamanho necessário. Se você quiser exibir algum texto nessa célula, coloque um rótulo acima da imagem. Não se esqueça de definir a cor de fundo do rótulo também para cor clara.
fonte
Descobri que a solução aceita não funcionou na rotação. Para alcançar UITableViewCells com larguras fixas e margens flexíveis, apenas adaptei a solução acima para o seguinte:
O método é chamado sempre que o dispositivo gira, então as células estarão sempre centralizadas.
fonte
Existe um método que é chamado quando a tela é girada: viewWillTransitionToSize
É aqui que você deve redimensionar o quadro. Consultar exemplo. Altere as coordenadas do quadro conforme necessário.
fonte
eu faço isso em
E isso funcionou para mim
fonte
No arquivo .h, adicione o delegado 'UITableViewDataSource'
fonte