Я настраиваю состояние контроллера детального представления непосредственно перед тем, как он будет помещен в navigationController
:
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
В DetailViewController
находится scrollView. Размер какого содержимого я изменяю в зависимости от переданного объекта:
- (void)detailsForObject:(id)someObject {
// set some textView's content here
self.contentView.frame = <rect with new calculated size>;
self.scrollView.contentSize = self.contentView.frame.size;
self.scrollView.contentOffset = CGPointZero;
}
Теперь все работает, но scrollView настраивает его contentOffset
во время анимации слайда navigationController. contentOffset
будет установлен на разницу между последним contentSize и новым рассчитанным. Это означает, что во второй раз, когда вы откроете DetailsView, детали будут прокручены в какое-то нежелательное место. Несмотря на то, что я явно устанавливаю contentOffset
на CGPointZero
.
Я обнаружил, что при сбросе contentOffset
в - viewWillAppear
эффект. Лучшее, что я мог придумать, - это сбросить contentOffset в viewDidAppear
, вызывая заметное перемещение содержимого вверх и вниз:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
Есть ли способ предотвратить настройку UIScrollView
его contentOffset
при изменении его contentSize
?