Je suis nouveau dans la programmation Objective-C.
J'utilise UIScrollView avec des étiquettes, une image et une vue de texte dessus.
J'ai désactivé Autolayout et déjà essayé avec "Ajuster les incrustations d'affichage de défilement" sur (situation décrite dans le titre) et sur (ne défile pas).
C'est ce que j'insère dans viewDidLoad:
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];
Mais je dois manquer quelque chose de très simple.
1 ... Pourquoi UIScrollView laisse-t-il de la place
Avec Storyboard - Aller au contrôleur de vue> Inspecteur d'attributs> Désélectionnez la propriété Ajuster les incrustations de vue en défilement
With Code - Pour l'espace supplémentaire, définissez viewController
propriété automaticallyAdjustsScrollViewInsets
sur NO
. Par défaut, il s'agit de YES
.
self.automaticallyAdjustsScrollViewInsets = false;
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
2 ... ne fait pas défiler vers le bas
Pour le faire défiler, essayez avec un grand nombre dans contentSize
comme CGSizeMake(320, 1687)
. Si cela fonctionne, cela signifie que vous ne définissez pas la contentSize
assez grande pour que tout son contenu soit présent.
Il suffit de sélectionner votre contrôleur de vue et de définir l'option affichée sur false (décocher)
iOS 11
Dans mon cas, seule la modification de cette propriété UIScrollView Content Insets dans IB de Automatic
à Never
a aidé.
iOS 11
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
Sur iPhoneX, cela se produira également en raison de certaines zones sécurisées que la mise en page automatique a tenté de prendre en compte. Correction (pour iPhoneX) avec ceci:
if (@available(iOS 11.0, *)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
Ça marche pour moi
_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);
En fait, la marge n'a rien à voir avec ScrollViewInsets
ou contentOffset
. Il s’agit simplement d’un conflit entre les épingles SuperView.Top
et SafeArea.Top
qui se produit lorsque vous épinglez UIScrollView en haut, en bas, à gauche et à droite.
C'est la bonne façon de couvrir la marge supérieure.
1) Épinglez tous les quatre côtés.
2) Sélectionnez la contrainte supérieure> Modifier le deuxième élément en Superview.Top
3) Ensuite, la dernière étape consiste à changer la constante en 0 (zéro) .
Vous voudrez peut-être aussi vérifier ceci: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift
Dans votre fichier .m, utilisez ce code pour résoudre ce problème.
-(void)layoutSubviews{
// To fix iOS8 bug of scrollView autolayout
if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
}