2017-02-16 54 views
0

我有一個UITableView,我需要顯示一個選擇器,所以我想縮短表框的高度,同時滾動到行以保持可見。UITableView - 調整大小的框架和滾動到行

我這樣做:添加的400個像素底部邊緣(通過設置到400的底部約束的距離),然後滾動到行

bottomConstraint.constant = 400 
tableview.scrollToRow(at: currentIndexPath, at: .bottom, animated: true) 

兩個命令都通過自己工作(I測試)。但結果是表格縮短了,所選行不會出現(例如,如果行是最後一行)。

顯然發生了什麼事情是在約束實際更新之前處理了滾動,因此如果行在約束更改之前是可見的,則在縮短表時它不會滾動。

任何想法?

+0

每一個約束條件的不斷變化應該跟着一個view.layoutIfNeeded() –

回答

1

設置約束條件後需要調用self.view.layoutIfNeeded()。另一種選擇是,您可以在完成處理程序中爲約束更改設置動畫並調用tableView.scroll...,但動畫約束的方式是設置常量,然後在動畫塊中調用layoutIfNeeded,因此除了視覺外,它本質上是相同的東西和時間方面。

+0

layoutIfNeeded做到了!謝謝 –