web-dev-qa-db-fra.com

UIScrollView ne défile pas dans iOS7 avec autolayout activé

J'ai un UIScrollView avec 6 champs de texte et un bouton à l'intérieur. Il n'y a pas assez de contenu dans scrollView pour le faire défiler.

Mais lorsque le clavier est affiché, je souhaite que le scrollview défile pour que l'utilisateur ne soit pas obligé de fermer le clavier pour sélectionner un autre champ de texte masqué par le clavier.

J'utilise iOS7 et l'autolayout est activé.

Aucune suggestion?

J'utilise des storyboards et le seul code que j'ai est le suivant.

fichier reg.h

interface registerViewController : UIViewController <UITextFieldDelegate, UIScrollViewDelegate>
19
jdog

Afin de faire défiler une vue de défilement, la taille du contenu doit être supérieure à celle du cadre de la vue de défilement afin que celle-ci puisse faire défiler. Utilisez setContentSize pour ajuster la taille du contenu:

[scrollview setContentSize:CGSizeMake(width, height)];

Dans ce cas, vous devez ajuster la taille à view.frame.width, view.frame.height + keyboard_height, puis ajuster le contenu du décalage lorsque le clavier apparaît:

[scrollview setContentOffset:CGPointMake(0, 0 - keyboard_height)];

Si, pour une raison quelconque, liée à l'autolayout, cela ne permet toujours pas de faire défiler la vue, implémentez cette fonction setContentSize dans viewDidLayoutSubviews afin de remplacer l'autolayout:

- (void)viewDidLayoutSubviews {
     [scrollview setContentSize:CGSizeMake(width, height)];
}

EDIT: pour réinitialiser l'affichage de défilement après avoir supprimé le clavier, réinitialisez la taille du contenu de l'affichage de défilement sur le cadre de l'afficheur de défilement et le décalage sur zéro:

[scrollview setContentSize:CGSizeMake(scrollview.frame.size.width, scrollview.frame.size.height)];
[scrollview setContentOffset:CGPointZero];

P.S. Pour animer le décalage du contenu, utilisez:

[scrollview setContentOffset:offsetSize animated:YES];
75
Lyndsey Scott

Il y a une propriété contentInset de UIScrollViews, vous pouvez définir le contentInset pour créer de l'espace supplémentaire en bas pour permettre le défilement sans changer contentSize.

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, 100, 0.0);
scrollView.contentInset = contentInsets;

le code ci-dessus ajoute 100 points en bas. 

À propos, il existe un document officiel à ce sujet. Cela explique tout ce que vous devriez faire. Vous pouvez le trouver ici . Vous trouverez ce que vous recherchez dans la section "Déplacement de contenu situé sous le clavier".

16
mrt

Essayer

  1. Créer une vue de défilement
  2. Ajouter une vue à la vue de défilement (Dans mon cas, j’ai ajouté la vue en tant que mainView).
  3. Définir le redimensionnement automatique ScrollView
  4. Configurez MainView autoresizing .

  5. Pour définir une taille de contenu de défilement égale à la vue créée, ajoutez la ligne ci-dessous.

Ajouter la ligne ci-dessous

-(void)viewDidLayoutSubviews

{

[super viewDidLayoutSubviews];

self.scrollView.contentSize = self.mainView.frame.size;

}
0
Sreenath S