2016-04-12 24 views
4

我有一個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()被調用。

回答

4

此問題通常是由視圖控制器上的屬性引起的。將其設置爲false應該可以修復它。

self.automaticallyAdjustsScrollViewInsets = false 

它也可以從故事板中設置。只需選擇視圖控制器並取消選中Adjusts scroll view insets即可。

+0

謝謝 - 當我禁用_Adjusts Scroll View Insets_選項時,我在日誌中得到了'(0,0),(0,0)',這確實表明這可以解決問題。然而,這個視圖控制器是從導航控制器鏈接到的,所以當該選項被禁用時,我的表中的最高結果隱藏在導航欄下。我應該手動設置插入嗎? –

+0

要麼你這樣做,要麼改變自己的邏輯以適應自動調整,無論看起來更方便。 – Jelly

+0

如何在保持自動調整的同時更改邏輯來解決問題?有沒有辦法觸發'contentOffset'的重新計算,以便適應-64的調整?或者有什麼方法可以確定調整會是什麼? –

相關問題