Eu tenho algumas tabelas (estilo agrupado) no meu aplicativo para iPhone (apenas em parte da tela e adicionadas com Interface Builder
, embora não subclassificadas UITableViewController
), que 80% das vezes são pequenas e cabem na tela. Quando a mesa couber na tela, eu gostaria de desativar a rolagem, para torná-la um pouco mais limpa. Mas se a tabela sair da tela (quando as linhas forem adicionadas posteriormente a ela), gostaria de ativar a rolagem novamente (porque, caso contrário, você não poderá ver esse conteúdo).
Existe uma maneira de fazer isso? Não consigo entender. Eu sei fazer:
tableView.scrollEnabled = NO;
mas não tenho certeza de onde, ou se tenho que calcular o tamanho do objeto da tabela ou algo assim para que isso funcione.
Atualização : Aqui está a solução que finalmente funcionou para mim:
if (table.contentSize.height < table.frame.size.height) {
table.scrollEnabled = NO;
}
else {
table.scrollEnabled = YES;
}
Eu executo esse código depois de chamar reloadData
a tabela, que calcula os tamanhos certos e parece funcionar.
table.frame.size.height
é o tamanho real do objeto (você pode ver isso Interface Builder
) exibido na tela, enquanto table.contentSize.height
as alturas de: cabeçalho, rodapé e altura de cada célula somadas.
fonte
Respostas:
Eu acho que você quer definir
fonte
interface builder
desmarcando o salto e o salto horizontal / verticalmente.Você pode verificar o número de células visíveis usando esta função:
Este método retornará uma matriz com as células visíveis, para que você possa contar o número de objetos nessa matriz e comparar com o número de objetos na sua tabela .. se for igual .. você pode desativar a rolagem usando:
Como o @Ginny mencionou .. poderíamos ter problemas com células parcialmente visíveis, portanto, esta solução funciona melhor neste caso:
Caso você esteja usando o autoLayout, esta solução faça o trabalho:
fonte
if (table.contentSize.height < table.frame.size.height)
>> veja editar na postagem original.Em Swift:
fonte
Portanto, existem várias respostas e requer todo o conteúdo de uma só vez, então estou adicionando esta resposta:
Se você estiver usando o AutoLayout, definindo isso só deve funcionar para você:
tableView.alwaysBounceVertical = false
Basta encontrar esta opção e a opção
untick
"Bounce Vertically
".Aqui está a referência:
Se você não estiver usando o AutoLayout:
fonte
tente isso
fonte
Você pode ativar / desativar o retorno ou a rolagem da tableview, selecionando / desmarcando-a na área Scroll View
fonte
Você pode editar isso no seu storyboard (se estiver usando um). Sob a exibição de tabela, há uma caixa de seleção que diz "Rolagem ativada". Desmarque e pronto.
fonte
// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
fonte
A altura padrão é 44.0f para uma célula de tableview, acredito. Você deve ter sua fonte de dados em mãos em uma matriz? Depois, verifique se
[array count]*44.0f
vai além dos limites do quadro e, se estiver definidotableview.scrollEnabled = NO
, defina-o como SIM. Faça onde você descobrir a fonte de dados para aquela visualização de tabela específica.fonte