web-dev-qa-db-fra.com

Pourquoi UIScrollView laisse-t-il de la place en haut et ne fait-il pas défiler vers le bas?

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.

19
user3686588

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. 

40
Yogendra

Il suffit de sélectionner votre contrôleur de vue et de définir l'option affichée sur false (décocher)

ViewController Inspector

31
invoodoo

iOS 11

Dans mon cas, seule la modification de cette propriété UIScrollView Content Insets dans IB de Automatic à Never a aidé.

12
mike.stalker

iOS 11

if #available(iOS 11.0, *) {
    scrollView.contentInsetAdjustmentBehavior = .never
} else {
    automaticallyAdjustsScrollViewInsets = false
}
9
casillas

Swift 3.0

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;     
6
Kam K

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;
}
1
Albert Renshaw

Swift 3 ((Mise en page automatique)} _

  1. Changer "Marges de mise en page" en explicite
  2. Définissez les marges selon vos besoins

 enter image description here

0
Matt Butler

Ç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)];
0
Gajendra K Chauhan

Swift 3.0

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;    

scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);
0
Francisco Castro

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. 

 Pinning

2) Sélectionnez la contrainte supérieure> Modifier le deuxième élément en Superview.Top

 conflict

3) Ensuite, la dernière étape consiste à changer la constante en 0 (zéro) .  enter image description here

Vous voudrez peut-être aussi vérifier ceci: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift

0
Satnam Sync

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)];
    }
}
0
Mr. Sun Lin