UIScrollView регулирует contentOffset при изменении contentSize

Я настраиваю состояние контроллера детального представления непосредственно перед тем, как он будет помещен в 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 ?

37
задан Jay Bhalani 15 February 2016 в 10:06
поделиться