如何在UITextView中设置边距(填充)?

我有一个UITextView文本编辑。 默认情况下,它在文本周围有一个小的边距。 我想增加几个像素的边缘。

contentInset属性为我提供了空白,但不会更改文本“换行宽度”。 文本以相同的宽度包装,额外的“边距”只是使视图水平滚动。

有没有办法让某个宽度的UITextView显示更窄的“包裹宽度”文本?

从iOS 7开始,您可以使用textContainerInset属性:

Objective-C的

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

迅速

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

经过一段时间的摆弄,我发现了另一个解决scheme,如果你只是开发iOS 6的。设置与contentInset的顶部和底部边距:

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

对于左右边距,不要立即添加纯文本,而是使用NSAttributedString,而不是使用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]; 

这给你一个UITextView与你的文字(在我的情况下从variablesmyText )与20个像素填充正确滚动。

尝试这个

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

你可以使用一个较小的UITextView,并在后台放置一个UIView来模拟填充。

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

这是为我工作。 更改textView contentInset和框架插入/位置以获得正确的填充和自动换行。 然后更改textView边界以防止水平滚动。 每次select和更改文本时,还需要重置填充。

 - (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]; } 

感谢您的build议。 我在开发一个macOS / OSX应用程序时遇到了这个问题,并以此结束:

 textView.textContainerInset = NSSize(width: 20, height: 20); //Sets margins 

尝试下面的代码

对于iOS7使用textContainerInset

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

检查下面的链接可能对你有用

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