2015-12-23 53 views
4

我正在實現一個簡單的視圖,該視圖由UIView和下面的Table視圖組成。修改約束時,表格視圖不能正確彈跳

我實現scrollViewDidScroll,我改變了UIView頂部約束,工作正常:

 headerTopConstraint.constant = -scrollY - 65 

(-65是原始約束)

的問題是,改變約束不變時編程,當沒有更多內容向下滾動時向下滾動時,我無法獲得平滑的桌面視圖反彈。

相反,它只是「嘗試」反彈,但它立即回到原來的位置。例如:http://jmp.sh/rTBfzCM

如果刪除只是一行代碼,所述彈跳工作完全正常:http://jmp.sh/AtVYwPy

表視圖具有爲0的頂部空間制約了UIView。

+0

如果使用TableHeaderView而不是單獨的UIView,會更好。然後根據tableView contentOffset更改headerView高度。 –

+0

對不起,有什麼問題嗎? – Jason

+0

@Jason爲什麼在編程式地改變頂視圖的常量時表格視圖不能正確跳轉 –

回答

2

我認爲這是發生的原因是因爲該行代碼動態更改約束的常量取決於當前值scrollY的

現在,我認爲這是鏈接到scrollview的y值。其中,由於「反彈」動畫正在影響這個值,所以它也會改變約束的常量。在您的特定的代碼行中,我認爲它恰好是「取消」滾動/反彈的動作,導致您看到的奇怪的緊張行爲。通過刪除這行代碼,你基本上刪除了這個鏈接,從而從約束的效果中釋放了scrollview反彈動畫。

爲什麼你正在改變約束的常量?也許嘗試一個不同的公式會導致你想要的結果。


編輯1 如何只更新約束常數這麼久的tableView的可見幀是的tableView的內容大小之內?像下面這樣(我不知道你的變量名稱):

//Check if user has scrolled through all content within tableview 
//If not, update constraint constant 
if scrollY < self.tableView.contentSize.height - tableView.frame.size.height { 
    headerTopConstraint.constant = -scrollY - 65 
} 
+0

我正在改變這個常數來將頂端的UIView進一步移動到頂端,正如你在這個截圖中看到的那樣:http://jmp.sh/rTBfzCM它工作正常,但不幸的是,因爲反彈被取消,頂部的動畫是「janky」。有沒有另外一種方法來移動UIView而不會影響表格視圖的彈跳? –

+1

您在編輯1中的代碼似乎完美地工作,我會做一些額外的測試,我會盡快接受答案。謝謝! –

+0

樂意幫忙! :) – Jason