2015-06-03 240 views
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) 

這段代碼的目的是:

  1. 調整子視圖,使他們有一個「頁面」
  2. 的寬度
  3. 在滾動視圖上啓用分頁
  4. 平滑地滾動到正確的頁面

不幸的是,它不僅沒有滾動到正確的頁面,看起來是因爲它試圖計算在約束更新時滾動的數量,但它以動畫明智的方式以不吸引人的方式進行。

如果我改變我的代碼,這(切割出來的動畫),它仍然不能正常工作:

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) 
}) 

回答

1

也許解決辦法可到contentOffset設置成動畫塊

UIView.animateWithDuration(0.35) { 
     self.view.layoutIfNeeded() 
     scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: false) 
    }