使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?

Posted

技术标签:

【中文标题】使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?【英文标题】:How do I prevent my UITableViewCell's contents from overlapping other cells when using insert animation? 【发布时间】:2016-06-30 15:08:27 【问题描述】:

示例项目: http://d.pr/f/Tkld

我有一个 UITableViewCell 子类,它非常简单地将单个 UIDatePicker 视图作为其唯一的子视图。

像 Calendar.app 一样,我想在用户点击单元格时显示一个内联日期选择器。我执行此操作的代码运行良好(我只是让自动布局计算高度并且它会完美增长),但是随着单元格的增长,日期选择器会与其他内容重叠,这看起来很奇怪。

在以下屏幕截图中,您可以看到“另一个单元格”的动画就在日期选择器的中间位置。

如何防止这种行为?单元格、单元格的 contentView 和日期选择器本身都打开了clipsToBounds,所以我什至不知道它是如何做到这一点或我应该做什么。

我在上面附加了一个示例项目,以尽可能小的场景显示它。在模拟器中打开“慢速动画”(调试 > 慢速动画)最容易看到,您会在其中看到日期选择器单元格在整个动画过程中绘制在其边界之外。

【问题讨论】:

【参考方案1】:

尝试实现tableView(_:heightForRowAtIndexPath:),并使日期选择器单元格的单元格高度更大。我在示例项目中没有看到它。这将确保您的单元格在显示时具有适当的高度。

【讨论】:

heightForRowAtIndexPath 对于自动布局单元格不是必需的,它有效地返回 UITableViewAutomaticDimension 并根据单元格的约束自行计算。值得我尝试的是只使用帧计算而不是自动布局,结果是一样的。 有趣,我以前没用过。我运行了这个项目……它按你的预期工作(iPhone 6、9.3)!你用的是哪个版本/模拟器? 打开慢速动画(Debug > Slow Animations or command-T)你就能看到了。我在设备上也试过 iPhone 6s 模拟器 ios 9.3。 我现在明白了。我以为你的意思是细胞的最终位置最终被卡在了彼此之上。届时将不得不更多地考虑这一点。 啊,不,抱歉不够清晰,我的意思更多是为了让日期选择器单元格在整个动画过程中越界(不尊重clipToBounds)。

以上是关于使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

将 UIViewController 推送到 UINavigationController 时动画挂起

如果动画在jQuery中停止,如何防止回调?

如何防止 Android 裁剪我的 ImageView?

如何防止相同的 id 将数据插入数据库(多用户)

如何防止 ReSharper 在我的 MSpec 字段之间插入空行?