如何在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);
检查下面的链接可能对你有用