2014-02-21 4 views
2

У меня есть наконечник с полноэкранным текстовым изображением. В viewDidLoad,UITextView contentOffset не инициализирован CGPointZero на iOS7

self.textView.attributedText = //some text; 

Его так просто, как это и прекрасно работает в режиме iphone ландшафтного исключения.

В ландшафтном режиме, когда я перехожу к этой странице, contentOffset.y этого текстаView не инициализируется до нуля. Таким образом, по умолчанию позиция прокрутки находится в середине содержимого (я ожидал, что это будет в начале содержимого).

для Ipad и iphone портретного режима, положение прокрутки находится в начале содержания (contentOffset.y равно нуль)

+3

Установите его в 'viewDidLayoutSubviews', возможно. – matt

+0

Один побочный эффект будет каждый раз, когда пользователь изменяет ориентацию при чтении содержимого, смещение содержимого будет сброшено до нуля – db42

+0

Я предлагаю вам сделать это только один раз. – matt

ответ

3

В прошивке 7, я также имеющий ту же проблема. Свиток UITextView начинается посередине в пейзажном представлении. У меня есть navigationBar в верхней части контроллера. Чтобы решить эту проблему, я установить contentOffset в viewDidLoad следующим образом:

[self.textView setContentOffset: CGPointMake(0,-200) animated:NO]; 

Я вычитают 200, чтобы сбалансировать с моей навигационной панели. И это сработало для меня. Поскольку он установлен в viewDidLoad, смещение y не сбрасывается до 0, если пользователь меняет ориентацию.

Надеюсь, это поможет!

+0

спасибо большое, это помогло мне исправить мою проблему! – Pangu

3

Следующее обходное решение помогло мне. setText вызывает UITextView метод setText.

[self performSelector:@selector(setText) withObject:nil afterDelay:0.f]; 
+0

Почему это работает? Что такое волшебство в отношении задержки в 0 секунд? – Arjan

+1

Очередь вызывает вызов -setText для следующего прохода через runloop, что позволяет выполнять другие ожидающие задачи runloop. Я предпочитаю использовать: CFRunLoopPerformBlock (CFRunLoopGetMain(), kCFRunLoopDefaultMode,^{...}); , который является другим способом сделать то же самое. – hyperspasm

3

В iOS7, чтобы прокрутить вверх, вы должны учитывать вставки содержимого. Я также обнаружил, что нужно ждать следующей итерации runloop, как говорит Алтаверон.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    _textView.contentOffset = CGPointMake(-_textView.contentInset.left, -_textView.contentInset.top); 
}); 
+0

работал для меня. + 1 – bittu

0

Моя Аналогичная проблема была решена следующим образом:

textView.contentOffset = CGPointMake(0.0, -50) 

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

По какой-то причине установка его в CGPointZero не повлияла. Однако установка смещения y на большое отрицательное число сделала трюк.

0

На iOS8 или более ранней версии iOS, используя textView.contentOffset = CGPointZero. Но от iOS 9 я думаю, нам нужно его обновить на viewDidLayoutSubviews()

Смежные вопросы