jestem dostosowanie stanu Fragment widok sterownika, po prostu zanim zostanie wciśnięty na navigationController
:UIScrollView dostosowuje contentOffset gdy contentSize zmienia
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
W DetailViewController
Scrollview zamieszkuje. Których zawartość zmianie rozmiaru na podstawie przekazany obiektu:
- (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;
}
Teraz to wszystko działa, ale Scrollview reguluje to contentOffset
podczas tego navigationController jest wsuwany w animacji. Wartość contentOffset
zostanie ustawiona na różnicę między ostatnią wielkością zawartości i nową wartością obliczoną. Oznacza to, że za drugim razem, gdy otworzysz szczegóły, szczegóły zostaną przewinięte do jakiejś niepożądanej lokalizacji. Chociaż ustawiam jawnie contentOffset
na CGPointZero
.
Zauważyłem, że zerowanie contentOffset
w - viewWillAppear
nie ma żadnego efektu. Najlepszym mogę wymyślić resetuje contentOffset w viewDidAppear
, powodujący zauważalny w górę iw dół o treści:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
Czy istnieje sposób, aby zapobiec UIScrollView
z dostosowując jego contentOffset
gdy jego contentSize
się zmieniło?
Dlaczego dostosowujesz przesunięcie treści w bloku animacji? Pomiń treści CATransaction, więc nie animuje. Wtedy nie będzie wyglądał na wzburzony. – Andrew
Usunięcie rzeczy CATransaction rzeczywiście niczego nie zmienia, więc jest usuwane. – Berik
Czy na pewno wywoływana jest metoda viewDidAppear? Ustawiłbym w nim punkt przerwania lub instrukcję NSLog. Czy próbowałeś zmienić kolejność połączeń, tj. Ustawić szczegółyForObject po naciśnięciu? – Andrew