Est-ce que les cellules du UITableView
spectacle sur l'espace vide lorsque vous faites défiler vers le bas?
Si tel est le cas, le problème peut provenir de l’encart ajouté au UITableView
contrôleur de navigation que vous avez dans votre vue. L'encart est ajouté à la vue de tableau afin que le contenu soit placé sous la barre de navigation lorsqu'aucun défilement n'a eu lieu. Lorsque le tableau fait défiler, le contenu défile et s'affiche sous une barre de navigation transparente. Ce comportement n'est bien entendu souhaité que si la vue tableau démarre directement sous la barre de navigation, ce qui n'est pas le cas ici.
Une autre chose à noter est qu'iOS ajuste l'encart de contenu uniquement pour la première vue dans la hiérarchie de vues si elle est UIScrollView
ou si elle est descendante (par exemple UITableView
et UICollectionView
). Si votre hiérarchie de vues comprend plusieurs vues de défilement, automaticallyAdjustsScrollViewInsets
apportera des ajustements uniquement au premier.
Voici comment modifier ce comportement:
a) Générateur d'interface
- Sélectionnez le contrôleur de vue
- Ouvrir l'inspecteur d'attributs
Il existe une propriété appelée «Ajuster les inserts de vue de défilement» dans l'inspecteur d'attributs d'IB (lorsqu'un contrôleur de vue est sélectionné) qui est activée par défaut. Décochez cette option:
(Image gracieuseté de Dheeraj D )
Je ne sais pas quelle version de Xcode a introduit cette option (je ne l'ai pas repérée dans les notes de publication), mais elle est au moins disponible dans la version 5.1.1.
Edit: Pour éviter toute confusion, c'était la troisième option mentionnée dans les commentaires
b) Par programme
Ajouter ceci à ie viewDidLoad
(crédits à la réponse de Slavco Petkovski et au commentaire de Cris R )
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) Cela pourrait être pertinent pour les anciens élèves
Vous pouvez soit résoudre ce problème en ajoutant
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Ou si vous utilisez IB et si la barre de navigation n'est pas transparente (ne peut pas le dire sur la capture d'écran)
- Sélectionnez le contrôleur de vue
- Ouvrir l'inspecteur d'attributs
- Dans les options du contrôleur de vue, section Prolonger les bords, désélectionnez «Sous les barres supérieures»
J'ai eu le même problème et je suis presque sûr que j'avais un UIView là-dedans à un moment donné. Le simple fait de copier la vue du tableau entier, de le supprimer et de le coller à nouveau a résolu le problème pour moi.
la source
Sélectionnez la vue de table dans votre storyboard et assurez-vous que le style est défini sur "Simple" au lieu de "Groupé". Vous pouvez trouver ce paramètre dans l'onglet Inspecteur d'attributs.
la source
Dans mon cas, j'avais un UILabel sous la hiérarchie UITableView in view.
Je l'ai déplacé "vers l'avant" et l'espace vide est apparu. Je ne sais pas pourquoi mais cela fonctionne comme ça, s'il y a quelque chose sous la tableView, cela cache l'espace vide.
Vous pouvez également essayer de cocher / décocher "Ajuster les inserts de vue de défilement" sur votre inspecteur de contrôleur de vue sur le storyboard.
la source
AUCUNE de ces réponses ne m'a aidé. mais cela a aidé :
au lieu de «-64», vous pouvez mettre n'importe quel autre nombre en fonction de la hauteur de votre barre de navigation.
la source
Il y a peut-être pré-ajouté
UIRefreshControl
. J'ai ce problème avec un code comme celui-ci:Comme vous le voyez, je me suis mis
self.refreshController
immédiatement aprèsinit
Mais, si vous définissez
refreshControl
après la configuration, l'espace supérieur ne vous gêne pas.la source
Si vous faites cela sur iOS 11, automaticAdjustsScrollViewInsets ne fonctionnera pas car il est obsolète, le code suivant a fonctionné pour moi selon la réponse dans ce post: https://stackoverflow.com/a/44391269/5476481
J'espère que cela t'aides.
la source
Dans le Storyboard, définissez le
contentInsets
de votretableview
sur Jamaisla source
Je ne peux pas le dire avec certitude, mais il semble que vous ayez un UIView supplémentaire coincé entre le début des cellules prototypes et le haut de UITableView. Mon image ressemble exactement à la vôtre si vous supprimez le texte / les lignes que j'ai ajouté.
la source
Je ne suis toujours pas sûr de la cause de cet espace supplémentaire en haut, mais j'ai trouvé que la suppression de UITableView avec l'espace et son remplacement par un nouveau prenait de l'espace.
J'ai dû y glisser un UIView accidentellement, mais je n'ai pas pu le sélectionner et je n'ai pas pu le supprimer.
la source
Swift 5
Essayez avec remove tableHeaderView et tableFooterView
la source
Vérifiez votre cadre tableview dans le storyboard ou xib. Le mien par défaut a une valeur de position ay, d'où le bug
la source
Dans mon application, j'ai également rencontré un problème comme celui-ci. J'ai défini l'insert de bord supérieur de tableView zéro. Également essayé ensemble
false
pourautomaticallyAdjustsScrollViewInsets
. Mais ça n'a pas marché.Enfin, j'ai une solution de travail. Je ne sais pas si c'est la bonne manière. Mais l'implémentation de la
heightForHeaderInSection
méthode déléguée a fonctionné pour moi. Vous devez renvoyer une valeur différente de zéro pour travailler ceci (le renvoi zéro affichera le même espace qu'avant).la source
En 2017, ce qui fonctionne pour moi, c'est simplement cette ligne
navigationController? .navigationBar.isTranslucent = false
Je n'ai aucune idée de pourquoi cela l'affecterait même. Quelqu'un pourrait peut-être expliquer. Mais je suis presque sûr que c'est la réponse que la plupart des gens rechercheraient.
la source
Dans iOS 11 et supérieur, Apple a changé de propriété pour ajuster l'encart de contenu. Utiliser
contentInsetAdjustmentBehavior
et mettre.never
à supprimer l' espace supplémentaire au- dessusUICollectionView
,UIScrollView
,UITableView
.J'espère que cela t'aidera.
la source
Eh bien, pour moi, le problème est survenu lorsque j'ai fait glisser une cellule prototype du menu dans la vue tableau. J'ai donc supprimé cela et défini simplement la cellule prototype sur 1 dans les propriétés de l'inspecteur de vue tableau
la source
Je fais cela par programme, et j'ai simplement déplacé mon addSubview (tableView) vers le bas après avoir ajouté toutes mes autres sous-vues, et cela a résolu mon problème!
Je ne sais pas pourquoi cela n'apparaît que sur l'appareil et non sur mon simulateur, mais dans tous les cas au moins, il existe une solution simple!
la source
Tant que UITableView n'est pas la première sous-vue du contrôleur de vue, l'espace vide n'apparaîtra pas.
Solution: ajoutez un objet de vue masqué / effacé (vues, étiquettes, bouton, etc.) comme première sous-vue du contrôleur de vue (au même niveau que l'UITableView mais avant).
la source
UIView peut être inséré en haut et en bas du tableau (glisser-déposer). Définissez leurs propriétés comme transparent et une hauteur de 1 px. Il s'agit de supprimer le rembourrage supplémentaire devant les cellules.
la source
J'ai également eu ce problème, la tableView n'était pas la dernière vue de la hiérarchie. Dans mon cas, j'avais une vue ci-dessus (même s'ils ne se chevauchaient pas), alors je l'ai fait glisser au-dessus de la tableView dans la hiérarchie et cela l'a fait.
la source
Je viens de trouver une solution pour cela.
Sélectionnez simplement la vue de la table et cliquez sur Editeur -> Organiser -> Envoyer au premier plan
Cela a fonctionné pour moi et j'espère que cela vous aidera tous.
la source
Dans mon cas, j'utilisais ContainerViewController et y mettais UITableViewController. Après avoir supprimé ContainerViewController. Les problèmes disparaissent.
la source
Bogue Xcode 8…
Essayez ceci en premier si votre style Storyboard UITableView est défini sur Plain.
Définissez le style de la table sur Groupé, puis de nouveau sur Plain. Cela a supprimé l'espace dans mon application à la tête de mon UITableView.
la source
Dans mon cas, j'utilisais une vue conteneur. (Vue principale -> Vue Contaner -> UITableView)
L'espace supplémentaire en haut, je pense, est comme l'espace de la barre de notification de l'appareil (où l'heure est affichée, la batterie). Je fais vraiment, ce n'est pas une hypothèse.
Ce que j'ai fait, c'est depuis UI Builder:
la source
Vous pouvez utiliser ce code dans viewDidLoad ou viewDidAppear où votre table est créée:
la source
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.pngla source
définissez les bords étendus de ViewController dans le storyboard afin que la
underTopBar
propriété soit désactivée.la source
Avait le même problème. Je l'ai résolu en ajoutant ce qui suit à viewDidLoad.
la source
Définissez les encarts de contenu sur zéro:
la source
vérifier
la source