Добавьте "padding" в UITextView
поскольку заголовок говорит, что я пытаюсь добавить поведение, подобное дополнению, в 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 containing text.
self.textView.editable = NO;
self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
//set the parent scrollView height to fit some other elements with fixed size (250)
//and the pre-mentioned UITextView
Итак, все работает, и все в порядке, но я хочу добавить прописку на всех 4 сторонах UITextView, и я не смог сделать это с 3-х часовым поиском для чего-то, что кажется довольно простым. Любые предложения?
Ответы
Ответ 1
EDIT 1/16/2015: Это было написано в 2012 году и уже не точным. Используйте -textContainerInset, как указано выше.
Оригинальное сообщение:
Использование contentInset не будет работать. У вас есть два разумных варианта: подкласс UITextField и переопределить методы textRectForBounds: and 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;
Ответ 2
Использование iOS7 Я сделал это только с помощью
[self.textView setTextContainerInset:UIEdgeInsetsMake(0, 12, 0, 12)];
Надеюсь, это поможет,
Mário
Ответ 3
Этот ответ совершенно неверен. Правильный ответ:
uitextview.textContainerInset =
UIEdgeInsetsMake(8,5,8,5); // top, left, bottom, right
(Эти значения обычно соответствуют тому, как выглядит UITextField на одном экране.)
Используйте это:
self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5);
Ответ 4
Это сработало для меня с помощью swift 2.0:
textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10)
Ответ 5
Для Swift 4.2:
textview.contentInset = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)
Ответ 6
Для Swift 3 - ответ кажется похожим, но немного другим:
textview.contentEdgeInsets = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)
(На самом деле, я использовал выше для UIButtonView, но поскольку он настолько закрыт для ответов, которые были отправлены для UITextView, я думаю [надеясь], что он применим и для этого)
Ответ 7
Просто создайте extension
UITextView
используя Container Edge Inset, следующим образом:
extension UITextView {
func leftSpace() {
self.textContainerInset = UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 4)
}
}
и используйте это как:
let textView = UITextView()
textView. leftSpace()
Ответ 8
Это работает в Swift 5:
textView.textContainerInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)