我有一个包含项目列表的UITableView
。
当用户点按编辑 UIBarButtonItem
时,需要删除第一行,因为它不可编辑。
我这样做:
- (void) setEditing: (BOOL) editing animated: (BOOL) animated
{
if (editing)
{
[self.theTableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: [NSIndexPath indexPathForRow: 0 inSection: 0]] withRowAnimation: UITableViewRowAnimationTop];
// call super afterward so the user doesn't see the row get an editing accessory before it disappears
[super setEditing: editing animated: animated];
}
else
{
[super setEditing: editing animated: animated];
[self.theTableView insertRowsAtIndexPaths: [NSArray arrayWithObject: [NSIndexPath indexPathForRow: 0 inSection: 0]] withRowAnimation: UITableViewRowAnimationTop];
}
}
这段代码(不相关的位被剪掉)效果很好,但有一点需要注意:
如果用户位于表格的任何位置(假设有多个屏幕的行),则动画行为会导致整个表格视图向上(或向下)向上滚动,以及最后一个行为表中的行充其量是可用的。
我的问题:我怎样才能让用户可以看到顶行动画,但是当用户看不到它时,它就会消失,但不会导致表格滚动。
答案 0 :(得分:0)
您是否尝试过UITableViewRowAnimationBottom
而不是UITableViewRowAnimationTop
?
否则,您可以手动设置contentOffset
的{{1}}属性以调整缺失的行。
答案 1 :(得分:0)
尝试使用UITableViewRowAnimationRight。如果单元格可见,则应该使单元格滑出,否则会使表格保持原样。
答案 2 :(得分:0)
在进行动画制作之前,请检查第一行是否可见。
如果是的话,那就是peoceed。
否则,您希望在用户向上滚动时不显示,对吗?所以用没有第一行的数据源替换表的数据源,编辑结束后将第一行返回到该数据源。
另一种选择可能是不通过操纵来显示它 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 但这可能是一种不好的做法。
答案 3 :(得分:0)
似乎没有任何简单的解决方案。我在UICollectionView
完全自定义行为方面取得了有限的成功,但iOS的主要版本和多年后,甚至Apple自己的内置应用程序继续使这种边缘情况出错。