我調整的細節視圖控制器的狀態,就在它上的navigationController
被推:的UIScrollView調整contentOffset當contentSize改變
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
在滾動視圖駐留的DetailViewController
。其內容我調整基於傳遞的對象上:
- (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;
}
現在,這一切工作,但滾動視圖調整它在navigationController的幻燈片的動畫contentOffset
。 contentOffset
將被設置爲最後一個contentSize和新計算的之間的差異。這意味着第二次打開detailsView時,細節會滾動到一些不需要的位置。儘管我明確地將contentOffset
設置爲CGPointZero
。
我發現重置contentOffset
- viewWillAppear
沒有效果。我能想出的重置在viewDidAppear
的contentOffset,導致內容的顯着的上下運動的最佳:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
有沒有一種方法,以防止UIScrollView
從調整其contentOffset
當其contentSize
改變?
爲什麼要調整動畫塊內的內容偏移量?跳過CATransaction的東西,所以它不動畫。然後它不會看起來波濤洶涌。 – Andrew
刪除CATransaction的東西確實不會改變一件事情,所以它被刪除。 – Berik
你確定viewDidAppear被調用嗎?我會在其中設置一個斷點或一個NSLog語句。另外,您是否嘗試切換您的調用順序,即在推送後設置detailsForObject? – Andrew