web-dev-qa-db-ja.com

UITextViewに「パディング」を追加する

タイトルが言うように、私はUITextViewにパディングのような動作を追加しようとしています。テキストビューは、ビューがNavigation Controller内にプッシュされると生成され、次のコードが発生します。

 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つの側面すべてにいくつかのパディングを追加したいと思います。助言がありますか?

36
magtak

2015年1月16日編集:これは2012年に作成されたため、正確ではなくなりました。上記のように-textContainerInsetを使用してください。

元の投稿:

ContentInsetの使用は実際には機能しません。 2つの妥当な選択肢があります。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;
24
Jamon Holmgren

IOS7を使用して、私はちょうどそれをやった

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

これがお役に立てば幸いです、マリオ

76
Mário Carvalho

この答えはまったく間違っています。正解は単純です:

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

(これらの値は通常、同じ画面上のUITextFieldの外観と一致します。)


これを使用してください:

self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5); 
54
Sergej Metelin

これは、Swift 2.0:

textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10)

9
Julian B.

Swift 4.2:

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

Swift 3-答えは似ているように見えますが、少し異なります:

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

(実際、上記はUIButtonViewに使用しましたが、UITextViewに投稿された回答に非常に近いので、それにも適用されることを望んでいます)

4
Adam Stoller

これはSwift 5:

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

次のようにContainer Edge Insetを使用して、extensionUITextViewを作成します。

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

次のように使用します:

let textView = UITextView()
textView. leftSpace()