2013-10-30 282 views
2

嘗試成爲ios7-esque時,我在表格中單擊時將UIPickerView插入到UITableView中。這工作正常,動畫很好。但是,通過調用deleteRowsAtIndexPaths回收單元格時出現問題。deleteRowsAtIndexPaths重疊問題

我正在經歷一個「出血」/重疊,其中選擇器隱藏了表格視圖中更下方的一個單元格。看截圖。

我沒有做任何超級定製,所以我不知道這是否是iOS7的錯誤。所有單元格都有純色背景色(白色)。

任何幫助將不勝感激。謝謝!

攻頂行 This is what it looks like after tapping the top row to reveal the picker

這是中期的動畫中退出。注意重疊,並在底部 Strange overlap

+0

當動畫結束時,所有表格單元格都應該是?僅僅是動畫本身的問題? – bilobatum

+0

另外,您傳遞給deleteRowsAtIndexPaths:withRowAnimation的動畫類型:例如自動,底部,頂部等? – bilobatum

+0

當動畫完成時,一切都很好,UI看起來應該如此。 我試過所有動畫類型,它們都產生相同的結果。 – brandontreb

回答

2

揀貨機在細胞中滲出我不知道爲什麼,但在我看來像拾取單元覆蓋下面的「選擇產品」的單元格。如果這是事實確實如此,一個解決方法是明確設置你的細胞的z順序,將撿拾小區的所有其他下:

#import <QuartzCore/QuartzCore.h> 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = ...;// your logic for getting a cell 
    BOOL isPickerCell = ...;// your logic for identifying if this is the picker cell 
    cell.layer.zPosition = isPickerCell ? 0 : 1; 
} 

如果選擇器是附近的表的底部,也可能仍然通過最後一個單元下方顯示,因爲沒有任何內容可以覆蓋它。例如,如果「選擇產品」是最後一個單元格。您可以通過在底部插入空白單元來解決此問題。這是具有不同高度細胞的一般問題。

+0

同樣的問題我正在使用自定義標題視圖的高度的默認單元格.DeleteRow /部分動畫是非常糟糕的 – user1010819

0

我有類似的問題(iOS 8的,iPhone 6模擬器)

在我的情況,我不得不含有DatePicker自定義單元格被插入/刪除任一Right Detail式小區之間或Right Detail風格細胞和區段之間如預期的那樣工作

[self.table beginUpdates]; 

if (isVisible) { 
    [self.table insertRowsAtIndexPaths:@[index] 
         withRowAnimation:UITableViewRowAnimationMiddle]; 
} else { 
    [self.table deleteRowsAtIndexPaths:@[index] 
         withRowAnimation:UITableViewRowAnimationMiddle]; 
} 

[self.table endUpdates]; 

但我也有被插入/ A Right Detail風格的單元格和節結束,因爲使用相同的代碼預期沒有工作之間刪除Right Detail風格的單元格。出現/消失的細胞在上方/通過上方的細胞可見,並且細胞移動了應有的兩倍。在下面的圖片中,People出現在Privacy,mid-animation下面。

enter image description here

然而,我注意到,當beginUpdates/endUpdates被註釋掉,細胞只移動了半個單元高度,而不是兩次細胞高度意味着它看起來很大提高。

我也試過設置zPosition,它在細胞重疊時似乎減少了可視性。

// [self.table beginUpdates]; 

if (isVisible) { 
    [self.table insertRowsAtIndexPaths:@[index] 
         withRowAnimation:UITableViewRowAnimationMiddle]; 
} else { 
    cell = [self.table cellForRowAtIndexPath:peopleIndex]; 
    cell.layer.zPosition = -1; 
    [self.table deleteRowsAtIndexPaths:@[peopleIndex] 
         withRowAnimation:UITableViewRowAnimationMiddle]; 
} 

// [self.table endUpdates]; 

enter image description here

2

這個問題掙扎後,我意識到,蘋果的日曆應用程序具有相同的問題

enter image description here

然而,他們通過一個插入的行儘量減少副作用.fade動畫。

tableView.insertRows(at: indexes, with: .fade)