2013-10-30 70 views
1

所以我有一個包含3個不同部分的tableview,一旦你點擊其中一個部分,一組單元從部分下拉。現在我試圖讓表視圖滾動到每個部分的最後一個單元格。我想出了這個至今:UITableview單元格在動畫之後隱藏在部分下。

[atableView beginUpdates]; 

    [atableView insertRowsAtIndexPaths:indexPathToInsert withRowAnimation:insertAnimation]; 
    [atableView setContentOffset:CGPointMake(0, self.view.bounds.size.height)]; 
    [atableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:deleteAnimation]; 

    [atableView endUpdates]; 

    self.openSectionIndex = section; 

所以,當我用這種方法,移動整個視圖高達不過就像我想一些頂級的細胞被切斷,在他們放棄了部分隱藏從下。我可能會過早地調用此方法,並且在行完成動畫之前調用,或者它們在該部分之下彈回。我能夠拉下桌面視圖,然後單元格從該部分下面出來。有任何想法嗎?

+0

細胞的默認行爲是部分下方埋下了伏筆。 – ManicMonkOnMac

回答

0

我實現像你描述一個可摺疊的部分組件,並可能對您的解決方案。

我實現在TLIndexPathTools庫。嘗試運行「摺疊」示例項目。展開第一部分。然後展開部分部分。您會看到在單元格動畫時,表格會滾動以儘可能多地在屏幕上顯示。

訣竅這樣做是要認識到,你需要滾動,這並不一定存在,但一個位置,因爲表視圖不會重新計算其內容的大小,直到後來在這個過程中。我使用的解決方案是明確地將表視圖的contentSize設置爲包含要滾動到的位置的值。我的長相實現這樣的:

/* 
Force table to scroll to the specified location even if it is beyond the current 
content area. Use this to scroll to a future location during animiated table updates 
with the assumption that the location will be valid after the updates. 
*/ 
- (void)forceTableScrollBasedOnExpectedSize:(CGFloat)scrollLocation animated:(BOOL)animated 
{ 
    CGSize expectedMinimumContentSize = self.tableView.contentSize; 
    if (expectedMinimumContentSize.height < scrollLocation) { 
     // Temporarily expand the content area to contain the scroll location. 
     // The table will overwrite this during the update process. 
     expectedMinimumContentSize.height = scrollLocation; 
     self.tableView.contentSize = expectedMinimumContentSize; 
    } 
    [self.tableView scrollRectToVisible:CGRectMake(0, scrollLocation-1, 1, 1) animated:animated]; 
} 

其中scrollLocation是你想看到的最低位置。你可以在UITableViewController+ScrollOptimizer.m中看到更多細節。

我不能完全肯定這適用於您的問題。如果沒有,請詳細說明您的問題。

+0

是啊,這完全是有道理的,我不能夠設置一個特定的滾動位置,因爲我嘗試使用[atableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0切入口:0] atScrollPosition:UITableViewRowAnimationBottom動畫:YES];它一直在產生一個錯誤。我在想這可能會使我朝着正確的方向發展,但是我現在的代碼已經能夠滿足我需要的所有功能,除了一個小小的細節之外。 –

+0

我想我應該闡述更多,但基本上問題始於我的表視圖行超出視圖或屏幕。所以我認爲,一旦主要部分標題選擇了什麼來解決問題,它就會部分地抵消該視圖。所以這就是真正的問題所在。 –

相關問題