将“填充”添加到UITextView

时间:2011-10-26 13:04:54

标签: ios uitextview padding

正如标题所说我试图向UITextView添加类似填充的行为。在我的导航控制器中推送视图时会生成textview,并出现以下代码:

 self.textView.layer.cornerRadius = 7;
 //pretty stuff is pretty

 NSString *description = appDelegate.productInDisplay.description;
 [self.textView setText:description];
 //pretty stuff has content now


 CGRect frame = textView.frame;
 frame.size.height = textView.contentSize.height;
 textView.frame = frame;
 //set the UITextView to the size of it's containing text.

 self.textView.editable = NO;

  self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
  //set the parent scrollView's height to fit some other elements with fixed size (250)
  //and the pre-mentioned UITextView

所以,一切正常,没关系,但我想在UITextView的所有4个方面添加一些填充,而我已经无法用3小时的谷歌搜索来做一些看似相当容易的事情。有什么建议吗?

7 个答案:

答案 0 :(得分:75)

使用iOS7我只用

完成了
[self.textView setTextContainerInset:UIEdgeInsetsMake(0, 12, 0, 12)];

希望这有帮助, 马里奥

答案 1 :(得分:52)

这个答案是完全错误的。正确答案很简单:

uitextview.textContainerInset =
       UIEdgeInsetsMake(8,5,8,5); // top, left, bottom, right

(这些值通常与同一屏幕上的UITextField的外观相匹配。)


使用这个:

self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5); 

答案 2 :(得分:24)

编辑2015年1月16日:这是写于2012年,不再准确。如上所述使用-textContainerInset。

原帖:

使用contentInset实际上不起作用。您有两个合理的选择:子类UITextField并覆盖textRectForBounds:和editingRectForBounds:方法,或者在UIView上透明地创建文本字段并设置UIView样式。

继承UITextField的示例:

- (CGRect)textRectForBounds:(CGRect)bounds {
     return CGRectInset(bounds, 5, 5);
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
     return CGRectInset(bounds, 5, 5);
}

将其包装在UIView中的示例:

UIView *wrapView = [[UIView alloc] initWithFrame: CGRectMake(10, 10, 200, 30)];
[wrapView addSubview:textView];
wrapView.layer.borderColor = [UIColor darkGrayColor].CGColor;
wrapView.layer.borderWidth = 2.0;
wrapView.layer.cornerRadius = 5.0;

答案 3 :(得分:5)

对于Swift 4.2:

+-----------+-------------+-------------+----------------+----------------+
    |           | VM <-> Host | VM1 <-> VM2 | VM -> Internet | VM <- Internet |
    +-----------+-------------+-------------+----------------+----------------+
    | HostOnly  |     Yes     |     Yes     |      No        |       No       |
    | Internal  |     No      |     Yes     |      No        |       No       |
    | Bridged   |     Yes     |     Yes     |      Yes       |       Yes      |
    | NAT       |     No      |     No      |      Yes       |  Port forward  |
    | NATNet    |     No      |     Yes     |      Yes       |  Port forward  |
    +-----------+-------------+-------------+----------------+----------------+

答案 4 :(得分:3)

对于Swift 3 - 答案似乎相似,但略有不同:

textview.contentEdgeInsets = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)

(实际上,我使用上面的UIButtonView,但因为它对UITextView发布的答案非常接近,我正在考虑[希望]它也适用于此)

答案 5 :(得分:0)

使用容器边缘插图,只需创建extension中的UITextView,如下所示:

extension UITextView {
    func leftSpace() {
        self.textContainerInset = UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 4)
    }
}

并像这样使用它:

let textView = UITextView()
textView. leftSpace() 

答案 6 :(得分:0)

这在Swift 5中有效:

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