web-dev-qa-db-fra.com

Encart de contenu UITextView

J'ai rencontré quelque chose d'un peu étrange avec contentInsets

J'ai un UITextView dans mon story-board avec un contentInset de 50 gauche, comme j'essaye d'ajouter un peu de remplissage à mon uitextview

Cependant, une barre de défilement apparaît au bas de la vue uitext, comme indiqué ci-dessous dans ce test:enter image description here

J'avais l'impression que contentInset écrase la uitextview sans provoquer cette barre de défilement horizontale. Comment puis-je supprimer le besoin de la barre de défilement horizontale et rendre tout - l'encart ET tout le texte de la vue uitextview - visible sans qu'il soit nécessaire de l'utiliser? barre de défilement.

N.B: Je ne demande pas d'empêcher le défilement horizontal ou de ne pas afficher la barre de défilement (donc couper du texte)

Merci beaucoup!

Pour atomk (UITextView s'appelle ss)

NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280
CGSize size=self.ss.contentSize; size.width=size.width-50;
[self.ss setContentSize:size]; 
NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230

Il n'y a pas de différence visible entre la vue avec le code ajouté et celle avant l'ajout, donc quelque chose ne va pas! (Merci)

56
H Bellamy

UPDATE: Cette solution est obsolète depuis iOS 7.

Voir cette réponse ci-dessous . Dans iOS 7.0, la propriété textContainerInset sur UITextView a été introduite:

textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0);

Solution pré-iOS 7:

J'avais l'impression que contentInset écrase uitextview sans provoquer cette barre de défilement horizontale ...

Je crains que ce ne soit pas ainsi que contentInset fonctionne avec un UITextView. Voir documentation Apple pour contentInset où il est indiqué:

Distance à laquelle la vue du contenu est insérée dans la vue de défilement entourante ... Utilisez cette propriété pour ajouter à la zone de défilement autour du contenu.

Le contentInset est ajouté autour du contenu.


Vous pouvez changer le contentSize dans viewDidLayoutSubviews en utilisant le code que vous avez inclus ci-dessus:

- (void)viewDidLayoutSubviews
{
    self.textView.contentInset = UIEdgeInsetsMake(0, 50, 0, 0);

    NSLog(@"Content Size Before %f",self.textView.contentSize.width); //Logs: 280
    CGSize size=self.textView.contentSize;
    size.width=size.width-50;
    [self.textView setContentSize:size];
    NSLog(@"Content Size After %f",self.textView.contentSize.width); //Logs: 230
}

Cependant, le texte est coupé du côté droit:

UITextView cut off on right side


Le meilleur moyen que j’ai pu obtenir l’apparence d’un remplissage horizontal dans un UITextView consiste à le positionner dans un conteneur UIView. Dans votre cas, créez simplement un UIView de la même taille que votre vue texte actuelle et ajoutez une vue texte plus étroite de 50 pixels à l'intérieur de la vue conteneur.

Cette solution de contournement peut poser problème si vous avez un arrière-plan pour votre vue texte, mais d'après votre capture d'écran ci-dessus, cela ne semble pas être un problème pour vous.

UITextView (cadre en rouge) à l'intérieur de UIView conteneur:

UITextView inside container UIView

Si votre UITextView a un fond, voir:

J'espère que cela vous aidera et si quelqu'un peut trouver une meilleure solution, j'aimerais en entendre parler!

92
Steph Sharp

Dans iOS 7, UITextView est basé sur TextKit et possède une nouvelle propriété textContainerInset. Il se comporte comme prévu:

UITextView *textView = ...;
// Left inset of 50 points
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);
172
Florian