Проблема со смещением содержимого UIScrollView - PullRequest
3 голосов
/ 11 января 2011

Я разрабатываю приложение для iPad, в котором у меня есть прокрутка, размер которой я определяю динамически в зависимости от количества объектов, которые я в ней отображаю.Теперь, хотя я не установил никакого смещения содержимого, я обнаружил, что представление прокрутки было смещено на некоторое количество всякий раз, когда представление загружается.Когда я проверяю значение смещения, он показывает 0. Я не понимаю, почему без значения contentOffset scrollview ведет себя таким образом.Есть ли причины для этого?

Я подозреваю, что это как-то связано с iOS 4.2, так как я не помню, чтобы эта проблема возникала, когда я тестировал приложение на iOS 3.2.

Обновление: сумма, которую он получаетсмещение, кажется, изменяется в зависимости от contentSize scrollView.Если contentSize scrollView совпадает с его высотой кадра (это вертикальное представление прокрутки), тогда смещения нет.По мере того как contentSize увеличивается выше значения высоты кадра scrollView, смещение также увеличивается пропорционально.Однако scrollView.contentOffset.y по-прежнему = 0.0

Ответы [ 6 ]

1 голос
/ 27 января 2011

UIScrollView определенно не ведет себя так же на iPad с iOS 4.2.1, как в iOS 3. Я еще не знаю, если это ошибка или я что-то пропустил в документации об эволюции.

Мой scrollview был создан в xib, и я повторно использовал его для отображения разных объектов одного и того же класса. В моем коде я только изменил contentSize этого прокрутки.

Смещение оставалось равным 0 при просмотре с NSLog, но на экране менялось.

Чтобы решить мою проблему, я создавал программно новый вид прокрутки каждый раз, когда отображал новый объект. Возможно, в вашем случае это невозможно, но для меня проблема решена исправлена.

1 голос
/ 11 января 2011

, если вы используете конструктор интерфейса -

  • добавить вид прокрутки к представлению
  • создайте другое представление и добавьте элементы, которые нужно добавить в представление прокрутки

затем добавьте второй вид в scrollview

написать этот код в Viewdidload scrollview.contentsize.y = lastelement.frame.origin.y + lastelement.frame.size.height + 10

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

0 голосов
/ 09 августа 2016

Также в Swift

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.contentOffset = CGPointZero
}
0 голосов
/ 07 июля 2015

Если вы используете Auto Layout и хотите установить смещение для содержимого вида прокрутки, это то, что мне помогло:

- (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];
     self.myScrollView.contentOffset = CGPointMake(500, 0);
}
0 голосов
/ 17 мая 2013

Я столкнулся с той же проблемой.Решается сохранением кода для настройки прокрутки в viewWillAppear:animated

-(void) viewWillAppear:(BOOL)animated
{
    scrollView.frame = self.view.frame;
    scrollView.contentSize = self.view.frame.size;
} 
0 голосов
/ 11 января 2011

Назначьте сумму frame.origin значение и frame.height значение последнего элемента для scrollView.contentOffset.y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...