Пустое место в верхней части UITextView в iOS 10


116

У меня есть UITextView с некоторым текстом. Все было хорошо с iOS 6, но теперь с iOS 7 он оставляет пустое пространство сверху, а затем помещает текст ниже середины текстового представления.введите описание изображения здесь

Я не устанавливал contentOffSet. Пожалуйста помоги!

Ответы:


217

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

Чтобы предотвратить это, установите следующее свойство в контроллере представления, содержащем текстовое представление:

self.automaticallyAdjustsScrollViewInsets = NO

7
Это лучший ответ, потому что он касается не только того, как исправить проблему, но и того, почему это происходит в первую очередь.
Стивен Мелвин

1
Кстати, вам не нужно создавать подклассы и переопределять. Просто установите для automaticAdjustsScrollViewInsets значение NO после создания экземпляра UITextView.
leftspin

1
@leftspin - довольно редкий случай, когда вы не создали подкласс контроллера представления. А переопределение метода означает, что ваш код по-прежнему будет работать с более ранними версиями iOS - установка свойства означает, что вам сначала потребуется проверка совместимости.
jrturton

1
Итак, если мой контроллер представления модели находится за пределами UINavigationController, смещение будет очищено? Это какое-то безумие ... Это поведение правильно ТОЛЬКО, когда мое текстовое представление выровнено по верхнему краю, иначе это мусор ... Кто-нибудь может объяснить, почему Apple сделала что-то подобное?
Paul Brewczynski

@jrturton извиняется за то, что это более старый пост, и, пожалуйста, извините меня, поскольку я новичок в objective-c, но в настоящее время это свойство UIViewController ... раньше это был метод?
Craig

58

Текущий ответ, который дал IronManGill, не является хорошим решением, потому что он не основан на понимании того, почему проблема возникает вообще.

Ответ jrturton также не самый чистый способ решить эту проблему. Вам не нужно отменять. Будь проще!

Все, что вам нужно, это установить следующее:

self.automaticallyAdjustsScrollViewInsets = NO;

в методе viewDidLoad.

Ознакомьтесь с документами: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
Иногда лучше внести изменения в раскадровку. Перейдите в «Инспектор идентичности» -> «Пользовательские атрибуты времени выполнения» и добавьте туда определение.
hufeng03,

automaticallyAdjustsScrollViewInsets устарела. Из iOS11, используйтеcontentInsetAdjustmentBehavior
Cœur

47

В Интерфейсном Разработчике

  • Выберите контроллер представления, который содержит UITextView.
  • Перейдите в инспектор атрибутов.
  • Снимите флажок «Настроить вставки прокрутки».

Это самое простое решение для моего случая на ios8
platinor

3
Примечание. Это свойство UIViewController. Не смог найти, а потом понял, что не прочитал текст полностью
Maik639


24

Перейти к Interface Builder:

  1. Выбрать view controller который содержит вашtext view
  2. снять отметку с Adjusts Scroll View Insetsсобственности

введите описание изображения здесь


это было то, что я искал. также вы можете сделать это, добавив self.automaticallyAdjustsScrollViewInsets = false в viewController
CodeOverRide

Это хороший и простой ответ, который только что завершил мой поиск «почему этот текст не отображается».
UpSampler

10

Мне действительно интересно, настоящая ли это особенность… Эта автоматическая вставка на 64 пункта добавляется только тогда, когда UIScrollViewилиUITextView как большая глубина всех подвидов представления контроллера представления. Например, если вы добавляете представление позади (здесь я говорю о z-буфере, а не о включении представления) от представления прокрутки, эта 64-точечная вставка не добавляется автоматически.

Например, здесь добавлена ​​вставка:

введите описание изображения здесь

В этом случае вставка не добавляется:

введите описание изображения здесь

Мне это действительно кажется странным ... Почему ОС должна смотреть на глубину представления, чтобы решить, следует ли расширять представление?



6

Вы можете удалить пустое пространство над своим UITextView, добавив:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

Я решил эту проблему, установив для смещения содержимого отрицательное значение. Вот код Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

Это было лучшее решение, позволяющее правильно сохранить вставки и прокрутку под полупрозрачной полосой. Я бы предложил эту модификацию. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
У меня кроме этого ничего не работало. Swift, Xcode 9.1.
Ashok

1

Вы должны понимать, что это относится к панели навигации:

  • Если ваш контент находится под панелью навигации, вы хотите, чтобы контроллер представления автоматически настраивал вставки представления прокрутки (по умолчанию).
  • Если ваш контент не попадает под панель навигации (вы, вероятно, использовали верхнее руководство по макету для ограничения верхнего пространства), вы можете отключить автоматическую настройку вставки прокрутки, как упоминалось в большинстве других ответов.

1

Я попробовал следующий трюк, все получилось.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}


0

Я уверен, что это непрофессиональное решение ... Но простая пустая метка позади текстового представления решает проблему.


1
это не решение =)
Ilker Baltaci

0

Это просто сработало для меня (доступно с iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.