Добавить «отступ» в UITextView - PullRequest
       50

Добавить «отступ» в UITextView

36 голосов
/ 26 октября 2011

как говорится в заголовке, я пытаюсь добавить поведение, похожее на заполнение, в UITextView. Текстовое представление генерируется, когда представление помещается в мой контроллер навигации и появляется следующий код:

 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 часами поиска в Google, что кажется довольно простым. Есть предложения?

Ответы [ 7 ]

75 голосов
/ 30 ноября 2013

Используя iOS7, я сделал это только с

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

Надеюсь, это поможет, Mário

53 голосов
/ 12 декабря 2011

Этот ответ совершенно неверный.Правильный ответ прост:

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

(Эти значения обычно совпадают с тем, как выглядит UITextField на том же экране.)


Используйте это:

self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5); 
24 голосов
/ 10 сентября 2012

РЕДАКТИРОВАНИЕ 16.01.2015: Это было написано в 2012 году и больше не является точным. Используйте -textContainerInset, как указано выше.

Оригинальный пост:

Использование contentInset на самом деле не будет работать. У вас есть два разумных варианта: подкласс UITextField и переопределение textRectForBounds: и editRectForBounds: методы или прозрачное создание текстового поля над 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;
9 голосов
/ 14 августа 2016

Это сработало для меня, используя swift 2.0:

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

5 голосов
/ 17 января 2019

Для Swift 4.2:

textview.contentInset = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)
4 голосов
/ 11 октября 2016

Для Swift 3 - ответ кажется похожим, но немного другим:

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

(На самом деле, я использовал вышеупомянутое для UIButtonView, но, поскольку оно настолько закрыто для ответов, которые были опубликованы для UITextView, я думаю [надеюсь], что оно применимо и для этого) *

0 голосов
/ 19 февраля 2019

Просто создайте extension из UITextView, используя Вставка края контейнера следующим образом:

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

и используйте его как:

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