Добавление левого поля в UITextView
Я пытаюсь добавить левое поле в UITextView.
Я попытался установить свойство contentInset, см. ниже:
UITextView *textView = [[UITextView alloc] initWithFrame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
textView.editable = YES;
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
textView.backgroundColor = [UIColor clearColor];
textView.opaque = NO;
textView.contentInset = UIEdgeInsetsMake(0, 15.0f, 0, 0);
Кажется, что это работает, хотя он вызывает горизонтальную прокрутку в TextView, который я не хочу.
Я просто хочу, чтобы текстовая вставка слева не увеличивала текст.
Ответы
Ответ 1
Если вы хотите только переместить текст, попробуйте
[textView setContentInset:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];
Если положительное число перемещает "текстовый фрейм" в сторону середины, отрицательный перемещает его из середины.
Например, [textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)]
, переместит текст на 20 пикселей вправо!
Ответ 2
Помните, что для iOS 7 существует специальное свойство
textContainerInset Вставка области размещения текстового контейнера в области содержимого текстового вида.
@property (неатомный, назначить) UIEdgeInsets textContainerInset
Это свойство предоставляет текстовые поля для текста, изложенного в текстовое представление.
Доступность Доступна в iOS 7.0 и более поздних версиях. Объявлено в UITextView.h
в iOS 6 этот контент выполняет работу. Я лично столкнулся с этой проблемой. Все закончилось:
if (isIOS7()) {
textView.textContainerInset = UIEdgeInsetsMake(0, 10, 0, 10);
} else {
textView.contentInset = UIEdgeInsetsMake(0, 10, 0, 10);
}
Ответ 3
Единственная вещь, которая работала для меня, заключается в подклассификации UITextView и переопределении следующего метода:
- (id)styleString
{
return [[super styleString] stringByAppendingString:@"; line-height: 1.6em;margin-right: 30px; margin-left: 45px; margin-top: 20px;"];
}
По-видимому, вы можете настроить маржу-левую, margin-top и все, что хотите;)
Предложение о размещении UITextView в более крупном UIView не работало для меня, поскольку мне нужно было прокручивать строки на фоне UITextView, для этого я использовал следующий проект с открытым исходным кодом:
https://github.com/aahsanali/NoteView
Кроме того, следующее решение не помогло мне вообще:
[textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)]
Так как текст не был правильно упакован.
Надеюсь, это решение поможет, поскольку я буквально потратил неделю на то, чтобы проложить этот простой пользовательский интерфейс!
Ответ 4
Вы можете попробовать этот код ниже с помощью Swift 3.0
// Align the text to the left edge of textContainer
textView.textContainer.lineFragmentPadding = 16
// Align the text with the top of textContainer
textView.textContainerInset = UIEdgeInsets.zero
Это работает для меня.
Ответ 5
Это намного проще, если вы делаете это через IB. Найдите панель с именем Размер прокрутки и установите вставки содержимого.
В коде вы можете попробовать установить scrollEnabled
на NO.
Ответ 6
UITextView
внутренне реализуется с использованием веб-представления. Эти внутренние элементы используют выделенные недокументированные трюки, которые также изменяются между обновлениями ОС. Один из этих трюков - снова и снова reset свойство contentInsets
. Когда и почему не задокументировано, я узнал, что любые изменения в макете текстового вида могут/будут запускать этот reset.
Мой первый совет заключался бы в том, чтобы не пытаться настраивать вставки текстового представления. Это просто хрупкое, и, вероятно, он будет разорван в будущем.
Если вы действительно настаиваете, я бы подклассифицировал UITextView
, переопределит -[UITextView layoutSubviews]
и закрепит там новые вставки.
В любом случае я перейду к http://bugreport.apple.com и сообщит о текущем поведении как серьезную ошибку.