Порожній простір вгорі UITextView в iOS 10


116

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

Я не встановив жодного contentOffSet. Будь ласка, допоможіть!

Відповіді:


217

Перегляд тексту - це вид прокрутки. Контролери перегляду додадуть зміщення вмісту автоматично для прокрутки подань, оскільки передбачається, що вони захочуть прокручуватися вгору за панеллю навігації та рядком стану.

Щоб запобігти цьому, встановіть наступне властивість на контролері подання, що містить текстовий вигляд:

self.automaticallyAdjustsScrollViewInsets = NO

7
Це краща відповідь, оскільки вона стосується не лише того, як виправити питання, але й чому це відбувається в першу чергу.
Стівен Мелвін

1
До речі, вам не доведеться підкласувати та переосмислювати. Просто встановіть автоматичноAdjustsScrollViewInsets на NO після того, як ви створили UITextView.
leftspin

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

1
Отже, якщо мій контролер перегляду моделей знаходиться поза UINavigationController, зміщення буде очищено? Це якось божевільно ... Така поведінка ТИЛЬКО правильна, коли моє перегляд тексту вирівняно вгорі, інакше це сміття ... Чи могла б хто-небудь пояснити, чому Apple зробила щось подібне?
Пол Бревчинський

@jrturton вибачається за те, що це старша посада, і вибачте мене, оскільки я новачок у target-c, але це зараз властивість UIViewController ... чи це раніше був метод?
Крейг

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.automatAdAdstsScrollViewInsets = false" для переглядуController
CodeOverRide

Це хороша і напружена відповідь, що щойно закінчився моїм пошуком "чому цей текст не відображається".
UpSampler

10

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

Наприклад, цей додає вставку:

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

У цьому випадку вставка не додається:

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

Мені це дійсно здається дивним ... Чому ОС би дивилася на глибину погляду, щоб вирішити, чи слід це розширювати?



6

Ви можете видалити порожній пробіл зверху UITextView, додавши:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

Я вирішив цю проблему, встановивши зміщення змісту на негативне значення. Ось код Свіфта.

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

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

1
Ніщо не працювало для мене, окрім цього. Швидкий, Xcode 9.1.
Ашок

1

Що ви повинні розуміти, це те, що це стосується навігаційної панелі:

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

1

Я спробував наступний трюк, він спрацював.

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


0

Це непрофесійне рішення, я впевнений ... Але просто поставлення порожньої мітки за текстовим переглядом вирішує проблему.


1
це не рішення =)
Ілкер Балтачі

0

Це просто працювало для мене (доступно з iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.