Подтвердить что ты не робот

Вставка содержимого UITextView

Я столкнулся с чем-то странным с contentInsets

У меня есть UITextView в моей раскадровке с содержаниемInset из 50 слева, так как я пытаюсь добавить некоторые дополнения к моему uitextview

Однако в нижней части uitextview отображается полоса прокрутки, как показано ниже в этом тесте: enter image description here

У меня создалось впечатление, что contentInset выкалывает uitextview, не вызывая эту горизонтальную полосу прокрутки, поэтому как я могу удалить необходимость в горизонтальной полосе прокрутки и сделать все - вставку И весь текст в uitextview - видимый без для этой полосы прокрутки.

N.B: Я не прошу о предотвращении прокрутки по горизонтали или не отображать полосу прокрутки (таким образом, вырезание текста)

Спасибо большое!

Для atomk (UITextView называется ss)

NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280
CGSize size=self.ss.contentSize; size.width=size.width-50;
[self.ss setContentSize:size]; 
NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230

Существует видимая разница нет между представлением с добавленным кодом, чем до его добавления, поэтому что-то не так! (Спасибо)

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: это решение устарело, как на iOS 7.

См. этот ответ ниже. В iOS 7.0 было введено свойство textContainerInset на UITextView:

textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0);

Решение Pre-iOS 7:

У меня создалось впечатление, что contentInset подавляет uitextview, не вызывая эту горизонтальную полосу прокрутки...

Я боюсь, что это не так, как contentInset работает с UITextView. См. Документация Apple для contentInset, где указано:

Расстояние, которое вид содержимого находится в виде вложенного вида прокрутки... Используйте это свойство для добавления в область прокрутки вокруг содержимого.

Добавлен contentInset вокруг содержимого.


Вы можете изменить contentSize в viewDidLayoutSubviews с помощью кода, который вы указали выше:

- (void)viewDidLayoutSubviews
{
    self.textView.contentInset = UIEdgeInsetsMake(0, 50, 0, 0);

    NSLog(@"Content Size Before %f",self.textView.contentSize.width); //Logs: 280
    CGSize size=self.textView.contentSize;
    size.width=size.width-50;
    [self.textView setContentSize:size];
    NSLog(@"Content Size After %f",self.textView.contentSize.width); //Logs: 230
}

Однако это приводит к отключению текста с правой стороны:

UITextView cut off on right side


Лучшим способом, которым я смог добиться появления горизонтальной прокладки в UITextView, является расположение его внутри контейнера UIView. В вашем случае просто создайте UIView того же размера, что и текущее текстовое представление, и добавьте текстовое представление, которое на 50 пикселей меньше в представлении контейнера.

Это обходное решение может вызвать проблемы, если у вас есть фон для вашего текстового вида, но из вашего скриншота над ним не похоже, что проблема для вас.

UITextView (рамка в красном) внутри контейнера UIView:

UITextView inside container UIView

Если ваш UITextView имеет фон, см.

Надеюсь, что это поможет, и если кто-нибудь сможет найти лучшее решение, я бы хотел услышать об этом!

Ответ 2

В iOS 7 UITextView основан на TextKit и имеет новое свойство textContainerInset. Он ведет себя так, как вы ожидали:

UITextView *textView = ...;
// Left inset of 50 points
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);