如何阻止 UITableView 在 iOS 7 中剪辑 UITableViewCell 内容

Posted

技术标签:

【中文标题】如何阻止 UITableView 在 iOS 7 中剪辑 UITableViewCell 内容【英文标题】:How to stop UITableView from clipping UITableViewCell contents in iOS 7 【发布时间】:2013-09-18 16:47:37 【问题描述】:

当我将我的应用程序从 ios6 更新到 iOS7 时,我注意到当单元格视图或 contentView 上的 clipsToBounds 属性设置为 NO 时,iOS6 单元格内容被允许跨越单元格外部的位置,iOS7 似乎禁用了这个即使整体视图、tableview、cell 和 cellcontent clipsToBounds 都设置为 NO。您可以在包含的图像中看到此示例。第一个是在iOS6上运行的测试代码,第二个是在iOS7上运行的相同代码:

有谁知道如何解决这个问题?我猜这只是一个单行修复,但我已经花了几个小时没有运气。为了避免重大的重写和头疼的问题,我会尝试使用视图、表格视图、单元格和单元格内容 clipsToBounds 没有结果——在 iOS7 上仍然全部设置为 NO,所以我不确定发生了什么不同。

您可以在https://github.com/Jon-Schneider/ClipsToBoundsTest查看和下载示例项目

谢谢!

【问题讨论】:

不确定这是否可行,但请尝试在单元格和表格视图上将clipsToBounds设置为 NO。 我试过了,但没用。事实证明,在单元格的主视图和默认将 clipToBounds 设置为 YES 的内容视图之间添加了一个新层。接受的答案有更多细节。 【参考方案1】:

看起来 iOS 7 中表格视图单元格的视图层次结构略有变化。

您可以尝试将剪辑设置为 contentView 的超级视图的边界:

[cell.contentView.superview setClipsToBounds:NO];

如果您将以下代码添加到示例代码并在 ios7 和 ios6 上运行,您会看到在单元格视图和内容视图之间多了一个视图:

[cell.contentView.superview setClipsToBounds:NO];
NSLog(@"%@", cell.contentView.superview);
NSLog(@"%@", cell.contentView.superview.superview);
NSLog(@"%@", cell);

if (self.view.clipsToBounds) 
    NSLog(@"Master clips");
 else 
    NSLog(@"Master no clip");

【讨论】:

在 iOS 7.1 中,单元格的 UITableViewCellScrollView 的 clipsToBounds 显式设置为 NO。这也发生在 UITableViewCellContentView 上。【参考方案2】:

您可以在 Clip Subviews 的 tableview 属性检查器中进行更改。

【讨论】:

现在这是真正的答案!谢谢!

以上是关于如何阻止 UITableView 在 iOS 7 中剪辑 UITableViewCell 内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 中将 UITableView 添加到 UIAlertView

为啥我的 UITableView 在 iOS 7 中被切断了?

如何阻止 UITableView 单元格在视图更改时消失

我们如何获得类似于 ios 6 的 ios 7 的分组 UITableview 样式

iOS 7 中 UITableView 的 contentInset 规则?

iOS 7 UITableView:是错误还是我?