As células do UITableView
programa estão no espaço vazio quando você rola para baixo?
Nesse caso, o problema pode ser a inserção adicionada ao UITableView
controlador de navegação que você tem em sua exibição. A inserção é adicionada à visualização da tabela para que o conteúdo seja colocado abaixo da barra de navegação quando nenhuma rolagem ocorreu. Quando a tabela é rolada, o conteúdo rola e é exibido sob uma barra de navegação transparente. Obviamente, esse comportamento é desejado apenas se a exibição da tabela iniciar diretamente sob a barra de navegação, o que não é o caso aqui.
Outro aspecto a ser observado é que o iOS ajusta o conteúdo inserido apenas para a primeira visualização na hierarquia de visualizações, se é UIScrollView
ou é descendente (por exemplo, UITableView
e UICollectionView
). Se sua hierarquia de visualizações incluir várias visualizações de rolagem, automaticallyAdjustsScrollViewInsets
fará ajustes apenas na primeira.
Veja como alterar esse comportamento:
a) Construtor de interface
- Selecione o controlador de exibição
- Inspetor de atributos abertos
Há uma propriedade chamada "Ajustar inserções de exibição de rolagem" no inspetor de atributos do IB (quando um controlador de exibição é selecionado) que está ativado por padrão. Desmarque esta opção:
(Imagem cortesia de Dheeraj D )
Não tenho certeza de qual versão do Xcode introduziu essa opção (não a localizou nas notas de versão), mas está disponível pelo menos na versão 5.1.1.
Edit: Para evitar confusão, esta foi a terceira opção mencionada nos comentários
b) programaticamente
Adicione isto a ie viewDidLoad
(créditos à resposta de Slavco Petkovski e comentário de Cris R )
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) Isso pode ser relevante para os alunos mais velhos
Você pode corrigir isso adicionando
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Ou se você estiver usando IB e se a barra de navegação não for transparente (não é possível distinguir na captura de tela)
- Selecione o controlador de exibição
- Inspetor de atributos abertos
- Na seção Opções do Controlador de exibição, estender arestas, desmarque "Abaixo das barras superiores"
Eu tive esse mesmo problema e tenho certeza de que tive um UIView lá em um ponto. Simplesmente copiar toda a exibição da tabela, excluí-la e colar novamente a corrigiu.
fonte
Selecione a tableview no seu storyboard e verifique se o estilo está definido como "Simples", em vez de "Agrupado". Você pode encontrar essa configuração na guia Inspetor de atributos.
fonte
No meu caso, eu tinha um UILabel na hierarquia do UITableView.
Movi-o "para frente" e o espaço em branco apareceu. Não sei por que, mas funciona assim, se houver algo sob o tableView, oculta o espaço em branco.
Além disso, você pode tentar marcar / desmarcar "Ajustar inserções de exibição de rolagem" no inspetor do controlador de exibição no storyboard.
fonte
Nenhuma das opções acima me ajudou. mas fazer isso ajudou :
em vez de '-64', você pode colocar qualquer outro número, dependendo da altura da sua barra de navegação.
fonte
Pode ser pré-adicionado
UIRefreshControl
. Eu tenho esse problema com código como este:Como você vê, eu defino
self.refreshController
imediatamente apósinit
Mas, se você definir
refreshControl
após a instalação, o espaço superior não o interferirá.fonte
Se você estiver fazendo isso no iOS 11, o ajuste automáticoAdJustsScrollViewInsets não funcionará conforme foi descontinuado, o código a seguir funcionou para mim de acordo com a resposta desta postagem: https://stackoverflow.com/a/44391269/5476481
Espero que isto ajude.
fonte
No Storyboard, defina o
contentInsets
seutableview
como Nuncafonte
Não posso ter certeza, mas parece que você tem um UIView extra preso entre o início das células protótipo e a parte superior do UITableView. Minha imagem se parece exatamente com a sua se você remover o texto / linhas que adicionei.
fonte
Ainda não tenho certeza do que causou esse espaço extra na parte superior, mas achei que excluir o UITableView pelo espaço e substituí-lo por um novo ocupava o espaço.
Devo ter arrastado um UIView para lá acidentalmente, mas não pude selecioná-lo para não excluir.
fonte
Swift 5
Tente remover tableHeaderView e tableFooterView
fonte
Verifique seu quadro de tableview no storyboard ou no xib. O meu por padrão tem um valor de posição, daí o bug
fonte
Na minha aplicação também tive um problema como este. Defina a borda superior inserida do tableView zero. Também tentei definir
false
paraautomaticallyAdjustsScrollViewInsets
. Mas não funcionou.Finalmente, consegui uma solução funcional. Não sei se é o caminho correto. Mas implementar o
heightForHeaderInSection
método delegado funcionou para mim. Você precisa retornar um valor diferente de zero para trabalhar isso (o retorno zero exibirá o mesmo espaço que antes).fonte
Em 2017, o que está funcionando para mim é simplesmente esta linha
navigationController? .navigationBar.isTranslucent = false
Eu não tenho idéia do por que isso afetaria isso. Talvez alguém possa explicar. Mas tenho certeza de que essa é a resposta que a maioria das pessoas procuraria.
fonte
No iOS 11 e superior, a apple alterou a propriedade para ajustar a inserção de conteúdo. Use
contentInsetAdjustmentBehavior
e configure.never
para remover um espaço extra acimaUICollectionView
,UIScrollView
,UITableView
.Eu espero que isso te ajude.
fonte
Bem, para mim, o problema ocorreu quando arrastei uma célula protótipo do menu para a exibição de tabela. Excluí isso e apenas defino a célula protótipo como 1 nas propriedades do inspetor de exibição de tabela
fonte
Estou fazendo isso programaticamente e simplesmente movi meu addSubview (tableView) para baixo depois de adicionar todas as minhas outras subvisões, e isso resolveu o meu problema!
Não sei por que isso aparece apenas no dispositivo e não no meu simulador, mas de qualquer forma, pelo menos, existe uma solução simples!
fonte
Enquanto UITableView não for a primeira subvisão do controlador de exibição, o espaço vazio não aparecerá.
Solução: adicione um objeto de visão oculta / clara (visualizações, rótulos, botão etc.) como a primeira subvisualização do controlador de visualização (no mesmo nível que o UITableView, mas antes dele).
fonte
O UIView pode ser inserido na parte superior e inferior da tabela (arrastar e soltar). Defina suas propriedades como transparentes e altura de 1 px. Isso é para remover o preenchimento extra na frente das células.
fonte
Eu também tive esse problema: o tableView não era a última exibição na hierarquia. No meu caso, eu tinha uma visão acima (mesmo que não se sobrepusessem), então a arrastei acima da tableView na hierarquia e ela foi criada.
fonte
Acabei de encontrar uma solução para isso.
Basta selecionar tableview e clique em Editor -> Organizar -> Enviar para a frente
Funcionou para mim e espero que ajude a todos.
fonte
No meu caso, eu estava usando ContainerViewController e colocando UITableViewController nele. Após remover o ContainerViewController. Os problemas desaparecem.
fonte
Bug do Xcode 8…
Tente primeiro se o estilo UITableView do Storyboard estiver definido como Simples.
Defina o estilo da tabela como Agrupado e, em seguida, volte para Simples. Isso removeu o espaço no meu aplicativo na cabeça do meu UITableView.
fonte
No meu caso, eu estava usando uma exibição de contêiner. (Main View -> Contaner View -> UITableView)
Acho que o espaço extra na parte superior é como o espaço da barra de notificação do dispositivo (onde a hora é exibida, a bateria). Realmente, não é uma suposição.
O que fiz foi no UI Builder:
fonte
Você pode usar esse código em viewDidLoad ou viewDidAppear onde sua tabela está sendo criada:
fonte
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
https://i.stack.imgur.com/vRNfV.pngfonte
defina as bordas estendidas do ViewController no storyboard para que a
underTopBar
propriedade seja desmarcada.fonte
Estava tendo o mesmo problema. Eu o resolvi adicionando o seguinte ao viewDidLoad.
fonte
Defina as inserções de conteúdo como zero:
fonte
verificar se há
fonte