2017-02-11 88 views
0

我想設置一個表格視圖,我可以上下移動行。 當移動一個單元格時,tableView中爲單元格製作空間的位置顯示爲大約2行太高。proposedDestinationIndexPath由於標題錯誤

當移動單元格,我通過登錄所提出的indexPath:

- (NSIndexPath*) tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath { 
    NSLog(@"%ld", proposedDestinationIndexPath.row); 
} 

和登錄行確實是關於我拿我的手機上減2

因爲它出現在一行中,問題是由具有標題的表視圖引起的,這似乎混淆了所提出的索引路徑的計算。頭在viewDidLoad加入一個固定的框架,但我不能在那個時候計算它的高度,因此其大小在viewWillLayoutSubviews設置:

- (void)viewWillLayoutSubviews { 

    [super viewWillLayoutSubviews]; 
    //.. 
    [myHeader setNeedsLayout]; 
    [myHeader layoutIfNeeded]; 
    CGRect newFrame = myHeader.frame; 
    newFrame.size.height = [self dynamicallyComputeHeight]; 
    myHeader.frame = newFrame; 
} 

所以它看起來像的tableView還沒有完全更新有關如何的信息從視覺位置計算indexPath,但這不會在其他委託調用中彈出。

回答

1

嘗試重新加載您的tableView:

- (void)viewWillLayoutSubviews { 

    [super viewWillLayoutSubviews]; 
    // Add a flag to cehck if it has already been updated 
    if (_hasUpdatedHeaderFrame) { return } 
    _hasUpdatedHeaderFrame = YES; 

    [myHeader setNeedsLayout]; 
    [myHeader layoutIfNeeded]; 
    CGRect newFrame = myHeader.frame; 
    newFrame.size.height = [self dynamicallyComputeHeight]; 
    myHeader.frame = newFrame; 

    [_tableView reloadData]; 
} 
+0

這將創建一個無限循環 – vib

+0

@vib呀,不好意思來晚了,當我寫到這,也許你應該有一個標誌,這樣做一次,我覺得你並不需要每次更新標題幀viewWillLayoutSubviews被反覆調用?我編輯了答案 – 2017-02-12 14:09:40

+1

我本可以自己想出來的,對不起。你的答案解決了它,它是完美的。非常感謝 – vib