Na minha exibição de tabela, tenho que rolar para o topo. Mas não posso garantir que o primeiro objeto seja a seção 0, linha 0. Pode ser que minha exibição de tabela comece na seção número 5.
Então, recebo uma exceção quando ligo para:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
Existe outra maneira de rolar para o topo da exibição da tabela?
ios
uitableview
Ilya Suzdalnitski
fonte
fonte
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
parece funcionar no iOS 11Nota : Esta resposta não é válida para iOS 11 e posterior.
eu prefiro
Se você tem uma inserção superior na visualização da tabela, é necessário subtraí-la:
fonte
tableView
não é zero acontentInset
partir do topo. Por exemplo:tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Se for esse o caso, no seu código atableView
rolagem para(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
.Ações possíveis:
1 1
2
3
4
5
Desativar Rolar para cima:
Modifique e use-o conforme o requisito.
Swift 4
fonte
É melhor não usar NSIndexPath (tabela vazia), nem assumir que o ponto principal é CGPointZero (inserções de conteúdo), é isso que eu uso -
Espero que isto ajude.
fonte
Swift 4 :
Isso funciona muito bem:
fonte
UITableViewStyleGrouped
(cabeçalhos rola com o conteúdo) e esse código funciona. Certifique-se de estar no segmento principal e de ativar esse código após a exibição (viewDidAppear
). Se você ainda tiver problemas, tente colocar o código dentro deste:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
Eu encontrei um problema ao tentar alguns dos métodos em um vazio
tableView
. Aqui está outra opção para o Swift 4 que lida com visualizações de tabletes vazias.Uso:
fonte
NÃO UTILIZE
Às vezes, pode definir o deslocamento incorretamente. Por exemplo, no meu caso, a célula estava realmente um pouco acima da vista com inserções de área segura. Não é bom.
USO EM VEZ
fonte
No iOS 11, use
adjustedContentInset
para rolar corretamente para o topo nos dois casos, quando a barra de status de chamada estiver visível ou não.Rápido:
fonte
Para tabelas com a
contentInset
, definir o deslocamento do conteúdo comoCGPointZero
não funcionará. Vai rolar para o topo do conteúdo vs. rolar para o topo da tabela.Levar em consideração o conteúdo inserido produz isso:
fonte
Este código permite rolar uma seção específica para o topo
fonte
Rápido:
fonte
Swift 3
se
tableView.setContentOffset
não funcionar.Usar:
fonte
Como o meu
tableView
é cheio de todos os tipos de inserções, essa foi a única coisa que funcionou bem:Swift 3
Swift 2
fonte
Além do que já foi dito, você pode criar uma extensão (Swift) ou categoria (objetivo C) para facilitar isso no futuro:
Rápido:
Sempre que você desejar rolar qualquer tabelaView para o topo, poderá chamar o seguinte código:
fonte
Prefiro o seguinte, pois leva em consideração uma inserção. Se não houver inserção, ela ainda rolará para o topo, pois a inserção será 0.
fonte
Rápido :
se você não tiver o cabeçalho tableView:
se então :
fonte
Swift 5, iOS 13
Eu sei que esta pergunta já tem muitas respostas, mas pela minha experiência, existe apenas um método que sempre funciona:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Se você estiver trabalhando em assinaturas assíncronas, que são animadas com teclados, etc., as outras respostas costumam rolar para quase o fundo, não o fundo absoluto. Esse método o levará ao final absoluto de uma tabela todas as vezes.
fonte
Aqui está o que eu uso para funcionar corretamente no iOS 11:
fonte
Em Swift 5, obrigado @ resposta de Adrian muito
Uso:
fonte
usar contentOffset não é o caminho certo. isso seria melhor, pois é o caminho natural da exibição de tabela
fonte
Este foi o único trecho de código que funcionou para mim
Swift 4:
PS 70 é a altura da minha célula de visualização de cabeçalho e tabela
fonte
chame essa função onde quiser UITableView, role para o topo
fonte
Swift 4 via extensão, lida com a exibição de tabela vazia:
fonte
Eu uso o tabBarController e tenho algumas seções na minha tableview em cada guia, portanto, essa é a melhor solução para mim.
fonte
Eu tive que adicionar a multiplicação
-1 *
à soma da barra de status e da barra de navegação, porque estava saindo dessa altura da tela,fonte
em rápido
sua linha = selectioncellRowNumber sua seção se você tiver = selectionNumber se você não tiver definido como zero
//UITableViewScrollPosition.Middle ou Bottom ou Top
fonte
Aqui está o código para ScrollTableView para o topo programaticamente
Rápido:
fonte
Em Swift-3:
fonte
Se você gostaria de mover a animação de rolagem na tabela, use este código. A rolagem é movida para o topo com animação em 0,5 segundos.
fonte
Com Swift:
fonte