2016-03-23 73 views
2

我一直在尋找並找不到解決這個問題的辦法。我目前的代碼是基於Reload section without reloading section header使用自動佈局擴展單元格時,UITableView跳轉。

我試圖在用戶按下單元格時生長一個uitableview單元格。我有一個UITableViewCell子類與UILabel最初限於兩行文本。當用戶按下UILabel時,我將UILabel中的numberOfLines屬性設置爲0,以便根據需要將其擴展爲儘可能多的行。

下面是從的tableView我的代碼:didSelectRowAtIndexPath方法:

if (((NSNumber *)expandedCells[indexPath.section]).boolValue) 
{ 
    labelExpandingCell.cellLabel.numberOfLines = 10; 
} else 
{ 
    labelExpandingCell.cellLabel.numberOfLines = 3; 
} 
[UIView setAnimationsEnabled:NO]; 
[self.tableView beginUpdates]; 
[self.tableView setNeedsDisplay]; 
[self.tableView endUpdates]; 
[UIView setAnimationsEnabled:YES]; 

有時候這工作得很好,通常當UITableView中的contentOffset.y == 0,通常情況下,實現代碼如下跳到向後100像素左右,當我執行這段代碼。以下是運行此代碼之前和之後的示例日誌。

2016年3月25日14:57:08.549 TableViewTest [485:129926]內容更新之前偏移:153.500000 2016年3月25日14:57:08.568 TableViewTest [485:129926]內容更新後,偏移量:136.500000

當我展開當前可見的單元格時,爲什麼autolayout會導致我的tableview向後跳躍?

+0

我得到了一些與過去工作的代碼類似的東西。不知道什麼時候開始。可能iOS 9 sdk?當然不想回去手動設置細胞高度! –

回答

3

我通過在我的tableview的委託中實現estimatedHeightForRowAtIndexPath方法解決了這個問題。我相信這個問題與tableview沒有正確估計我的tableview中沒有實現此方法的前幾部分的高度,因此在我更新tableview中的一個部分時跳躍。

+0

是的,我通過添加固定高度和去除estimatedHeight解決.. :) –

0

你有設置的UITableView

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = DEFAULT_ROW_HEIGHT

如果是,檢查確保您的UILabel約束正確應用到電池。 如果你設置了上述兩個屬性,你可以避免實現「estimatedHeightForRowAtIndexPath」方法。

+0

它不適合我! – Archerlly

相關問題