我有一個UITableView
它有一個分段控制在其導航欄中。我使用相同的表格視圖來顯示3組不同的數據,基於分段控件的選定索引。我現在試圖保留每個分段選項的滾動位置,以便每個分段選項有一個表格(即每個選擇的結果具有獨立的滾動位置)。爲什麼使用分段控件時UITableView contentOffset會改變?
要做到這一點,我存儲每個狀態,這是設置到contentOffset
當所選擇的段索引的變化之一CGPoint
變量。變量使用來設置片段更改時表視圖的內容偏移量。
但是,看起來contentOffset
值在所選段索引發生更改時發生更改,而表中的位置沒有任何可見變化。這就像內容偏移量的0位置正在移動,這使得我的存儲值現在錯了。
當我的控制器包含以下方法:
override func viewDidLoad() {
// set up the view here...
print(tableView.contentOffset)
}
@IBAction func selectedSegmentChanged(sender: AnyObject) {
print(tableView.contentOffset)
// code to change the data shown in the table view...
}
我碰到下面的記錄時,認爲負載:
(0.0,0.0)
但改變後段我得到:
(0.0,-64.0)
所有狀態顯示錶視圖滾動到完全相同的位置,即 - 在頂部。
此行爲阻止我能夠正確地存儲滾動位置,因爲內容偏移量的「含義」似乎正在改變。
編輯:內容偏移其實viewDidLoad()
和viewDidAppear()
,最有可能的之間調整,由於內容插圖。所以我現在第一次存儲內容偏移值viewDidAppear()
被調用。
謝謝 - 當我禁用_Adjusts Scroll View Insets_選項時,我在日誌中得到了'(0,0),(0,0)',這確實表明這可以解決問題。然而,這個視圖控制器是從導航控制器鏈接到的,所以當該選項被禁用時,我的表中的最高結果隱藏在導航欄下。我應該手動設置插入嗎? –
要麼你這樣做,要麼改變自己的邏輯以適應自動調整,無論看起來更方便。 – Jelly
如何在保持自動調整的同時更改邏輯來解決問題?有沒有辦法觸發'contentOffset'的重新計算,以便適應-64的調整?或者有什麼方法可以確定調整會是什麼? –