ios 向UITextView添加“填充”

zc0qhyus  于 2022-12-24  发布在  iOS
关注(0)|答案(8)|浏览(166)

正如标题所说,我正在尝试向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

所以,这一切都工作,这是确定的,但我想添加一些填充的所有4个方面的UITextView和我一直无法做到这一点与3小时的谷歌搜索的东西似乎相当容易.有什么建议?

aemubtdh

aemubtdh1#

使用Objective-C我刚刚用

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

对于Swift,您可以用途:

textview.contentInset = UIEdgeInsets(top: 0, left: 12, bottom: 0, right: 12)

您还可以创建Swift扩展(由chowdhury-md-rajib-sarwar建议)here

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

}
然后使用

let textView = UITextView()
textView.leftSpace()
tf7tbtn2

tf7tbtn22#

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

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

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

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

fhity93d3#

这在Swift 5中是有效的:

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

whhtz7ly4#

编辑日期:2015年1月16日这是在2012年编写的,现在已经不准确了。如上所述,请使用-textContainerInset。

  • 原帖:*

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

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

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

将其 Package 在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;
6xfqseft

6xfqseft5#

我在使用swift 2.0时就做到了这一点:
第一个月

pcrecxhr

pcrecxhr6#

对于Swift 4.2:

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

bxgwgixi7#

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

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

(实际上,我在UITuttonView中使用了上述方法,但由于它与UITextView中发布的答案非常接近,我认为(希望)它也适用于UITuttonView)

c2e8gylq

c2e8gylq8#

只需使用容器边缘插入创建UITextViewextension,如下所示:

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

像这样使用它:

let textView = UITextView()
textView. leftSpace()

相关问题