Добавление левого поля в UITextView - PullRequest
12 голосов
/ 10 августа 2011

Я пытаюсь добавить левое поле в 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, что мне не нужно.

Я просто хочу, чтобы текстовая вставка слева не делала текстовое представление более широким.

Ответы [ 6 ]

23 голосов
/ 04 октября 2013

Помните, что для iOS 7 существует специальное свойство, которое называется

textContainerInset. Вставка области макета текстового контейнера в область содержимого текстового представления.) UIEdgeInsets textContainerInset

Это свойство предоставляет текстовые поля для текста, размеченного в текстовом представлении.

Доступность Доступно в iOS 7.0 и более поздних версиях.Объявленный в UITextView.h

в iOS 6, contentInset выполняет свою работу.Я лично сталкивался с этой проблемой.Все закончилось с:

if (isIOS7()) {
    textView.textContainerInset = UIEdgeInsetsMake(0, 10, 0, 10);
} else {
    textView.contentInset = UIEdgeInsetsMake(0, 10, 0, 10);
}
16 голосов
/ 19 марта 2012

Если вы хотите переместить только текст, попробуйте

[textView setContentInset:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];

Там, где положительное число перемещает «текстовую рамку» к середине, а отрицательное - из середины.* Например, [textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)], переместит текст на 20 пикселей вправо!

2 голосов
/ 05 апреля 2013

Единственное, что сработало для меня, это подклассифицировать UITextView и переопределить следующий метод:

    - (id)styleString
{
    return [[super styleString] stringByAppendingString:@"; line-height: 1.6em;margin-right: 30px; margin-left: 45px; margin-top: 20px;"];
}

По-видимому, Вы можете настроить поле слева, поле сверху и все, что вы хотите;)


Предложение о размещении UITextView в более крупном UIView у меня не сработало, так как мне нужно было прокручивать строки на фоне UITextView, я использовал для этого следующий проект с открытым исходным кодом: https://github.com/aahsanali/NoteView

Также мне не помогло следующее решение:

[textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)]

Так как текст не был правильно упакован.

Я надеюсь, что это решение поможет, так как я буквально потратил неделю на изучение этого простого интерфейса UI!

1 голос
/ 26 октября 2016

Вы можете попробовать этот код ниже с 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

У меня это работает.

0 голосов
/ 10 августа 2011

UITextView внутренне реализовано с использованием веб-представления.Эти внутренние компоненты используют множество недокументированных трюков, которые также меняются между обновлениями ОС.Один из этих трюков - время от времени сбросить свойство contentInsets.Когда и почему это не задокументировано, я узнал, что любые изменения в макете текстового представления могут / будут вызывать этот сброс.

Мой первый совет - не пытаться настраивать вставки текстового представления.,Это просто хрупко, и, вероятно, сломается в будущем.

Если вы все равно действительно настаиваете, то я бы создал подкласс UITextView, переопределил -[UITextView layoutSubviews] и заставил бы туда вставить новых вставок.в любом случае я бы пошел к http://bugreport.apple.com и сообщил о текущем поведении как о серьезной ошибке.

0 голосов
/ 10 августа 2011

Гораздо проще, если вы делаете это через IB. Найдите панель с именем Размер прокрутки и установите вкладки содержимого.

В коде вы можете попробовать установить scrollEnabled в NO.

...