Я настраиваю состояние контроллера подробного вида, непосредственно перед тем, как оно выдвигается на 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
во время анимации вставки навигационного контроллера.contentOffset
будет установлен на разницу между последним contentSize и новым вычисленным.Это означает, что во второй раз, когда вы открываете DetailsView, детали будут прокручиваться в какое-то нежелательное место.Даже при том, что я явно устанавливаю contentOffset
в CGPointZero
.
Я обнаружил, что сброс contentOffset
в - viewWillAppear
не имеет никакого эффекта.Лучшее, что я мог придумать, это сбросить contentOffset в viewDidAppear
, вызывая заметное движение вверх и вниз контента:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
Есть ли способ, чтобы UIScrollView
не смог настроить contentOffset
когда его contentSize
изменяется?