2013-10-30 233 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)