2017-07-06 2 views
0

j'ajouté du texte dans UITextView et de comprendre les limites que je couleur mon UITextView avec la couleur cyan.espace supplémentaire à la fin de UITextView

enter image description here

Après google.com il y a un peu d'espace supplémentaire que je veux supprimer.

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     NSString *desc = [self htmlAfterReplacingTagsAndAddingStyle]; 
     _descriptionTextView.attributedText = [[NSAttributedString alloc] initWithData: [desc dataUsingEncoding:NSUTF8StringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; 
     _descriptionTextView.linkTextAttributes = @{ NSForegroundColorAttributeName: [UIColor blueColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle] }; 
     _descriptionTextView.dataDetectorTypes = UIDataDetectorTypeLink; 
     _descriptionTextView.scrollEnabled = NO; 
     [self setTextViewHeight]; 
    } 

setTextViewHeight

- (void)setTextViewHeight { 
    UIFont *font = [UIFont fontWithName:@"OpenSans" size:14.0]; 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, _descriptionContainer.frame.size.width, CGFLOAT_MAX)]; 
    label.numberOfLines = 0; 
    label.lineBreakMode = NSLineBreakByWordWrapping; 
    label.font = font; 
    NSString *desc = [self htmlAfterReplacingTagsAndAddingStyle]; 
    label.attributedText = [[NSAttributedString alloc] initWithData: [desc dataUsingEncoding:NSUTF8StringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; 
    [label sizeToFit]; 
    _descriptionTextView.backgroundColor = UIColor.cyanColor; 
    [_descriptionTextView setContentInset:UIEdgeInsetsMake(0, 0, -80, 0)]; 
    _descriptionContainerHeight.constant = label.frame.size.height; 
    } 

Je lis sur le réglage encart de contenu, mais ce n'est pas utile. Changer la valeur de -80 n'a aucun impact.

Je vous serais reconnaissant quelques conseils qui peuvent me aider à éliminer le présent espace supplémentaire au bas de UITextView.

Répondre

2

Utilisez

[_descriptionTextView setTextContainerInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 

comme le readed dans UITextView référence de classe

textContainerInset Propriété L'encart de la mise en page de conteneur de texte zone dans la zone du contenu de l'affichage du texte.

Déclaration

Objective-C @property (cédez), non atomiques UIEdgeInsets textContainerInset

Discussion

Cette propriété offre des marges de texte pour le texte mis dans la vue texte. Par défaut, la valeur de cette propriété est (8, 0, 8, 0).

Hope this helps

+0

D'accord. Je pense que la méthode du PO pour mesurer la hauteur des cordes est soit incorrecte, soit au moins gaspilleuse. – danh

+0

@AsthaGupta a fait ma réponse pour résoudre votre problème? –

+0

Salut Reinier - Merci pour la réponse. Mais cela fonctionne dans certains cas, pas tous. Si ma chaîne n'a pas de saut de ligne, cela fonctionne comme un charme. Cependant, si ma chaîne a des sauts de ligne, je suis toujours confronté au problème tel que mentionné ci-dessus. Je vais upvote votre réponse, mais je ne peux pas l'accepter comme une solution :) –

0

Vous devriez être en mesure d'obtenir quelque part avec textContainerInset (voir la réponse @ReinierMelian). Il y a aussi la possibilité de simplifier considérablement la mesure de la hauteur du texte ...

UIFont *font = [UIFont fontWithName:@"OpenSans" size:14.0]; 
CGFloat width = _descriptionTextView.bounds.size.width; 
NSString *string = [self htmlAfterReplacingTagsAndAddingStyle]; 
CGRect rect = [string boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil]; 

CGRect frame = _descriptionTextView.frame; 
frame.size = CGSizeMake(width, rect.size.height); 
_descriptionTextView.frame = frame; 
// due to @ReinierMelian... 
_descriptionTextView.extContainerInset = UIEdgeInsetsMake(0, 0, 0, 0); 
+0

Merci pour une tentative de simplement ma réponse. Mais votre code ne prend pas en compte les espaces et les sauts de ligne dans la chaîne.J'ai besoin de préserver cela dans mon cas :) –

+0

@AsthaGupta - le code ci-dessus gère tout contenu d'entrée de chaîne exactement comme le fait le système de métriques de texte. Je l'ai testé pour montrer que la hauteur change exactement proportionnellement au nombre de \ n présent dans la chaîne (* hauteur de la police (+ interligne, interligne, etc.)) – danh

0

Pour supprimer tous les padding:

[textView setTextContainerInset:UIEdgeInsetsZero]; 
textView.textContainer.lineFragmentPadding = 0; // to remove left padding 

Si vous souhaitez supprimer plusieurs nouvelles lignes en un seul, Dans textViewDidEndEditing:

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\n+" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSString *trimmedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@" "]; 
textView.text = trimmedString;