UITableViewCell 在 iOS8 的编辑模式下没有裁剪到边界(适用于 iOS7.1)
Posted
技术标签:
【中文标题】UITableViewCell 在 iOS8 的编辑模式下没有裁剪到边界(适用于 iOS7.1)【英文标题】:UITableViewCell not clipping to bounds in editing mode in iOS8 (works in iOS7.1) 【发布时间】:2014-12-11 20:46:59 【问题描述】:我正在设置 UITableViewCell 的高度,以便它会剪切而不是该行的所有内容都是可见的。这在 ios7 “不编辑”模式和“编辑”模式下都可以正常工作。在 iOS8 中,它仅在“非编辑”模式下工作。编辑单元格的全部内容时,点击左侧的红色删除按钮后会显示单元格的全部内容,以便您看到右侧的删除按钮。
我一直在设置cell.clipsToBounds = YES
,并认为这就是我需要做的。
编辑:我也尝试过cell.contentView.clipsToBounds = YES
,但这没有用。
iOS7:(这就是我想要的)
iOS8:
【问题讨论】:
你试过cell.contentView.clipToBounds = YES
吗?
是的,几分钟前刚刚尝试cell.contentView.clipsToBounds
(带有's')无济于事(我将添加此信息)。
你能贴出你手机的笔尖文件吗?我想检查您的自动布局设置。如果你在故事板中这样做,你可以将故事板中的单元格复制到单独的笔尖并共享吗?
你如何改变单元格的高度?通过 UITableView heightForRowAtIndexPath 和重新加载单元格?
1) 看着约束让我很尴尬(固定宽度的 textField??——我只能说它已经过时了!)。这是xib。 Here is the xib.
【参考方案1】:
看起来 iOS 8 中的 UITableView 在开始编辑时将 cell.contentView.clipToBounds 设置为 NO。此代码可帮助我解决您的问题:
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.contentView.clipsToBounds = YES;
【讨论】:
太棒了!一个微调。willBeginEditingRowAtIndexPath
仅在滑动时调用。这里的问题是在用户点击左侧的删除指示器以获得右侧的删除确认之后。刷卡也是一样的,我从没想过要尝试。我使用- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
设置clipsToBounds = YES
。这解决了它。但也许是重手。【参考方案2】:
我尝试了 Vitaliy 和 ToddB's 的解决方案,但不幸的是,尽管它们在大多数情况下都有效,但它们并不总是 100% 一致。
我讨厌必须覆盖 layoutSubviews,但到目前为止我还没有找到其他 100% 有效的解决方案:'(
override func layoutSubviews()
super.layoutSubviews()
self.contentView.clipsToBounds = true
【讨论】:
很遗憾需要这些东西。 是的,这太糟糕了,我会提交一个错误报告,但他们可能只是告诉我我使用的 API 不正确。以上是关于UITableViewCell 在 iOS8 的编辑模式下没有裁剪到边界(适用于 iOS7.1)的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 在 iOS8 的编辑模式下没有裁剪到边界(适用于 iOS7.1)
iOS7 iOS8 UITableviewCell处于编辑状态,dismiss或者back崩溃
UITableViewCell 图像在上下滚动后发生变化,但 TextLabel 文本保持不变(iOS8,Swift)
UITableViewCell 中的多行 UILabel 在 iOS8 中使用 autoLayout 给出错误的高度