web-dev-qa-db-fra.com

Espace vide en haut de UITextView dans iOS 10

J'ai UITextView avec du texte. Tout allait bien avec iOS 6, mais maintenant avec iOS 7, il laisse un espace vide en haut, puis place le texte au-dessous du milieu de la visualisation.enter image description here

Je n'ai défini aucun contentOffSet. S'il vous plaît aider!

114
Ali Sufyan

Une vue de texte est une vue de défilement. Les contrôleurs de vue ajouteront automatiquement un décalage de contenu pour faire défiler les vues, car ils sont supposés vouloir défiler derrière la barre de navigation et la barre d'état. 

Pour éviter cela, définissez la propriété suivante sur le contrôleur de vue contenant la vue texte:

self.automaticallyAdjustsScrollViewInsets = NO
216
jrturton

La réponse actuelle donnée par IronManGill n’est pas une bonne solution, car elle ne repose pas sur une compréhension de la raison pour laquelle le problème se produit au départ. 

la réponse de Jrturton n’est pas non plus la solution la plus propre. Vous n'avez pas besoin de passer outre. Rester simple!

Tout ce dont vous avez besoin est de définir les paramètres suivants:

self.automaticallyAdjustsScrollViewInsets = NO;

dans la méthode viewDidLoad.

Consultez la documentation: https://developer.Apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

58
Dumoko

Dans le constructeur d'interface,

  • Sélectionnez le contrôleur de vue qui contient UITextView.
  • Accédez à l'inspecteur d'attributs.
  • Décochez la case "Ajuster les encarts de la vue de défilement".
47
user2268026

Cela a fonctionné pour moi

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;
37
Ravi Bihani

Allez à Interface Builder

  1. Sélectionnez view controller qui contient votre text view
  2. décocher la propriété Adjusts Scroll View Insets

 enter image description here

24
Aamir

Je me demande vraiment s'il s'agit d'une fonctionnalité réelle… Cet encart automatique de 64 points n'est ajouté que lorsque UIScrollView ou UITextView est la profondeur plus grande de toutes les sous-vues de la vue du contrôleur de vue. Par exemple, si vous ajoutez une vue derrière la vue de défilement (ici, je parle de z-buffer, et non d’imbrication de vue), cet encart de 64 points n’est pas ajouté automatiquement.

Par exemple, celui-ci ajoute l'encadré:

enter image description here

Dans ce cas, l'encart n'est pas ajouté:

enter image description here

Cela me semble vraiment étrange… Pourquoi le système d'exploitation examine-t-il la profondeur de la vue pour décider s'il doit l'étendre? 

10
MonsieurDart

Vous pouvez supprimer l'espace vide au-dessus de votre UITextView en ajoutant:

yourTextView.textContainerInset = UIEdgeInsetsZero;
6
lberyouk

Sur Swift (Xcode 6)

 self.automaticallyAdjustsScrollViewInsets = false
6
Claudio Barrozo Prado

J'ai résolu ce problème en définissant le contenu du contenu sur une valeur négative. Voici le code Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)
5
Saqib Omer

J'ai essayé le truc suivant, ça a marché.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}
1
casillas

Ce que vous devez comprendre, c'est que cela concerne la barre de navigation:

  • Si votre contenu passe sous la barre de navigation, vous souhaitez que le contrôleur de vue ajuste automatiquement les encarts de défilement de la vue (par défaut).
  • Si votre contenu ne passe pas sous la barre de navigation (vous avez probablement utilisé le guide de disposition supérieur pour la contrainte d'espace supérieure), vous pouvez désactiver l'ajustement automatique de l'encadré de la vue de défilement, comme indiqué dans la plupart des autres réponses.
1
CodeStage

C'est une solution peu professionnelle, j'en suis sûr ... Mais le simple fait de mettre une étiquette vierge derrière la vue en mode texte résout le problème. 

0
Terence

Solution pour Swift 4:

textView.textContainerInset = UIEdgeInsets.zero
0
Kostas Tsoleridis

Cela a juste fonctionné pour moi (disponible sur iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
0
RyanTCB