2
我有一個scrollview禁用分頁。它有許多子視圖。其中每個都有一個寬度約束,並且互相約束和滾動視圖,所以當子視圖增長時,scrollview內容區域會增長。滾動到滾動視圖頁面,而滾動視圖正在調整
當子視圖被竊聽,我運行下面的代碼:
var page = subView.tag
for scrollViewSubViewWidthConstraint in scrollViewSubViewWidthConstraints {
//this results in the subview being larger than it previously was
scrollViewSubViewWidthConstraint.constant = self.view.frame.width
}
UIView.animateWithDuration(0.35) {
self.view.layoutIfNeeded()
}
scrollView.pagingEnabled = false
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: true)
這段代碼的目的是:
- 調整子視圖,使他們有一個「頁面」 的寬度
- 在滾動視圖上啓用分頁
- 平滑地滾動到正確的頁面
不幸的是,它不僅沒有滾動到正確的頁面,看起來是因爲它試圖計算在約束更新時滾動的數量,但它以動畫明智的方式以不吸引人的方式進行。
如果我改變我的代碼,這(切割出來的動畫),它仍然不能正常工作:
self.view.layoutIfNeeded()
scrollView.pagingEnabled = true
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: false)
這工作,但它沒有動畫,它的延遲 - 這兩者都不是好的。
self.view.layoutIfNeeded()
UIHelper.delay(0.1, closure: {() ->() in //helper function that executes code after a given delay...
self.scrollView.pagingEnabled = true
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: true)
})