Hoe marges instellen (padding) in UITextView?

Ik heb een UITextView voor tekstbewerking. Standaard heeft het een kleine marge rond de tekst. Ik wil die marge met een paar pixels vergroten.

De eigenschap contentInset geeft me marges, maar verandert niets aan de tekst “wrap width”. De tekst wordt met dezelfde breedte omwikkeld en de extra “marge” zorgt ervoor dat de weergave horizontaal scrollt.

Is er een manier om een ​​UITextView van een bepaalde breedte de tekst weer te geven met een smallere “wrap width”?


Antwoord 1, autoriteit 100%

Vanaf iOS 7 kunt u de eigenschap textContainerInsetgebruiken:

Doelstelling-C

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

Snel

textView.textContainerInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)

Antwoord 2, autoriteit 30%

Na hier een tijdje mee te hebben gerommeld, vond ik een andere oplossing als je alleen voor iOS 6 ontwikkelt. Stel de boven- en ondermarges in met contentInset:

textView = [[UITextView alloc] init];
textView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 20.0, 0.0);

Voeg voor de linker- en rechtermarge niet meteen uw platte tekst toe, maar gebruik in plaats daarvan een NSAttributedStringmet correct ingestelde linker- en rechterinspringingen met een NSMutableParagraphStyle:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.headIndent = 20.0;
paragraphStyle.firstLineHeadIndent = 20.0;
paragraphStyle.tailIndent = -20.0;
NSDictionary *attrsDictionary = @{NSFontAttributeName: [UIFont fontWithName:@"TrebuchetMS" size:12.0], NSParagraphStyleAttributeName: paragraphStyle};
textView.attributedText = [[NSAttributedString alloc] initWithString:myText attributes:attrsDictionary];

Dit geeft je een UITextView met je tekst (in mijn geval van de variabele myText) met 20 pixels opvulling die goed kan scrollen.


Antwoord 3, autoriteit 8%

Probeer dit

UIBezierPath* aObjBezierPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, 20)];
txtView.textContainer.exclusionPaths  = @[aObjBezierPath];

Antwoord 4, autoriteit 6%

Je kunt gewoon een kleinere UITextView gebruiken en een UIView op de achtergrond plaatsen om de opvulling te simuleren.

+----------+
|          | <-- UIView (as background)
|   +--+   |
|   |  | <---- UITextView
|   |  |   |
|   +--+   |
|          |
+----------+

Antwoord 5, autoriteit 3%

als u de opvulling vanaf één kant wilt instellen, kunt u onderstaande code gebruiken:

textView.contentInset.left = 5 //For left padding
 textView.contentInset.right = 5 //For right padding
 textView.contentInset.top = 5 //For top padding
 textView.contentInset.bottom = 5 //For bottom padding

Antwoord 6

Dit werkt voor mij. De textView contentInset en frame inzet/positie wijzigen om de juiste opvulling en woordterugloop te krijgen. Wijzig vervolgens de tekstView-grenzen om horizontaal scrollen te voorkomen. U moet ook de opvulling opnieuw instellen telkens wanneer de tekst wordt geselecteerd en gewijzigd.

- (void)setPadding
{
    UIEdgeInsets padding = UIEdgeInsetsMake(30, 20, 15, 50);
    textView.contentInset = padding;
    CGRect frame = textView.frame;
    // must change frame before bounds because the text wrap is reformatted based on frame, don't include the top and bottom insets
    CGRect insetFrame = UIEdgeInsetsInsetRect(frame, UIEdgeInsetsMake(0, padding.left, 0, padding.right));
    // offset frame back to original x
    CGFloat offsetX = frame.origin.x - (insetFrame.origin.x - ( padding.left + padding.right ) / 2);
    insetFrame = CGRectApplyAffineTransform(insetFrame, CGAffineTransformMakeTranslation(offsetX, 0));
    textView.frame = insetFrame;
    textView.bounds = UIEdgeInsetsInsetRect(textView.bounds, UIEdgeInsetsMake(0, -padding.left, 0, -padding.right));
    [textView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
}
-(void)textViewDidChangeSelection:(UITextView *)textView
{
    [self setPadding];
}
-(void)textViewDidChange:(UITextView *)textView
{
    [self setPadding];
}

7

Probeer onderstaande code

voor iOS7 gebruik & nbsp; TextContainerinset

Textview.TextContainerInSet = UiedgeinsetsMake (0, 20, 0, 20);

Controleer hieronder Link het kan handig voor u zijn

https://stackoverflow.com/a/22935404/5184217

Other episodes