Я настраиваю состояние контроллера подробного представления, как раз перед тем, как его нажимают на navigationController
:
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
В DetailViewController
находится scrollView. Какое содержимое я изменяю на основе переданного объекта:
- (void)detailsForObject:(id)someObject {
// set some textView 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 и новой рассчитанной. Это означает, что во второй раз, когда вы откроете detailView, детали будут прокручиваться до некоторого нежелательного местоположения. Даже если я устанавливаю contentOffset
в CGPointZero
явно.
Я обнаружил, что сброс contentOffset
в - viewWillAppear
не влияет. Лучшее, что я мог придумать, - это сбросить содержимоеOffset в viewDidAppear
, что приведет к заметному перемещению содержимого вверх и вниз:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
Есть ли способ предотвратить настройку UIScrollView
его contentOffset
при изменении contentSize
?