Изменение UIScrollView contentOffset после другого представления
у меня есть UIViewController
в Interface Builder, и я добавляю UIScrollView
до UIView
. У него есть contentOffset
свойство равно 0.0, но когда я прокручиваю UIScrollView
на самое дно и нажмите другой вид contentOffset
изменения.
NSLog
дает мне следующие значения:
//View just loaded
2013-09-09 16:19:27.455 my_app[24588:907] Scroll View content offset is 0.000000
//We came back from another view
2013-09-09 16:19:30.957 my_app[24588:907] Scroll View content offset is 108.000000
в чем причина такого поведения? Я только что добавил UIScrollView
В IB и вообще ничего не делал в коде.
на contentHeight
scrollView больше, чем self.view.height
. Этот frame
scrollView остается прежним.
6 ответов
посмотреть мой ответ: на подобный вопрос.
вам нужно установить scrollview в contentOffset
соответственно в viewWillAppear:
и viewWillDisappear:
.
кроме того, см. Это:
- ответ на вопрос источник UIScrollView изменяется после возврата к UIViewController.
- этот вопрос Проблема Автозапуска UIScrollview.
У меня была аналогичная проблема, после увольнения viewController, contentOffset из моего tableView был изменен на (0, -64).
мое решение было немного странным, я пробовал все другие ответы, но не имел успеха, единственное ,что исправило мою проблему, - это переключить положение tableView в дереве элементов управления.xib
Это был первый элемент управления в Родительском представлении, как это:
я переместил tableView сразу после ImageView и это сработало:
кажется, что размещение представления таблицы в первой позиции вызывало проблемы, а перемещение представления таблицы в другую позицию исправило проблему.
P. D. я не использую autoLayout ни раскадровки
надеюсь, что это может помочь кому-то!
когда вы покинете экран, на котором присутствует scrollview, и вернетесь, он добавит половину размера экрана сверху или слева или оба. Пустое место, чего ты не хочешь. И в моем случае подкачка становится беспорядочной и не работает должным образом, пока я не помещу свиток в CGPointZero программно или на ощупь, как пользователь. Если вы позвоните NSLog( @"%f", scrollview.contentSize.height );
on viewDidLayoutSubviews
вы увидите, что размер изменился.
это происходит на оси, значение смещения которой не равно нулю. Так, чтобы решите его, вы должны установить его на ноль CGPointZero
прежде чем он появится.
на @Steph Sharp
ответ решите мою проблему, за исключением случаев, когда я открываю viewcontroller как всплывающее окно (presentViewController
). Я попытался компенсировать значение, добавив сумму ошибки на viewDidLayoutSubviews
но это ошибки подкачки.
короткий ответ, я в конечном итоге с:
- (void) viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
scrollView.contentOffset = previousPoint;
}
- (void) viewWillAppear:(BOOL)animated
{
scrollView.contentOffset = CGPointZero;
}
- (void) viewWillDisappear:(BOOL)animated
{
previousPoint = scrollView.contentOffset;
scrollView.contentOffset = CGPointZero;
}
теперь он работает, когда я покидаю раздел или открываю всплывающее окно выше.
Я использовал https://github.com/michaeltyson/TPKeyboardAvoiding на UITableView.
моим решением было удалить class TPKeyboardAvoidingTableView из UITableView. Это вызывало проблему прокрутки на TableViewController со статическими и динамическими ячейками.
проверить, если contentSize
свойство вашего scrollview является CGSizeZero
. У меня была аналогичная проблема, потому что contentSize
не было установлено.