如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?

Posted

技术标签:

【中文标题】如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?【英文标题】:How to convert a UITableViewCell's content view to a normal UIView in Interface Builder? 【发布时间】:2014-09-13 16:04:25 【问题描述】:

我在 Interface Builder 中设计了一个复杂的 UITableViewCell,它有很多子视图和约束。问题是它们中的许多都是内容视图的直接子级。我现在想在内容视图和我的所有子视图之间插入一个 UIView。

或者,另一种思考方式是想象我想在没有表格视图的普通 UIViewController 上包含我的所有单元格内容。

无需手动重新创建所有约束的最简单方法是什么?

【问题讨论】:

您想要这样做的真正原因是什么?您可以(如果您提到的是您真正想要做的)从单元格中删除 contentView,并将其添加到另一个视图。 【参考方案1】:

我不确定是否有人写过这个解决方案,但这个解决方案有点老套。如果您想将UITableViewCell contentView 转换为基本视图,您必须按照以下步骤操作:

    将故事板作为源代码作为 XML 文件打开。您可以在编辑此文件时使用一些 XML 编辑器来帮助您 在故事板 XML 文件中查找 <tableViewCell> 元素数组 在<tableViewCell> 标签内找到<tableViewCellContentView> 元素。将其内容复制到 XML 文件中的某处(最好的办法是 <subviews> 元素,以避免在编辑 XML 文件时出现一些错误) 将<tableViewCellContentView key="contentView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" 转换为<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO"。相信这一步生成的XML可能存在一些差异,但是原理很明显。只需创建一个空视图以检查空视图的有效 XML 设置。 将</tableViewCellContentView> 转换为</view>

在这些步骤之后,您将准备好在情节提要中编辑视图,并且您可以根据需要从表格中删除原始单元格。

【讨论】:

【参考方案2】:

非常简单,您只需选择所有视图并在上方菜单中选择 EDITOR->EMBED IN->VIEW 唯一的问题是它将添加一种 20pts 的填充。查看answer了解更多详情

【讨论】:

不幸的是,这不会保留安装在我选择的任何***视图上的约束。 true.. 但我想这是唯一的选择,除非你以编程方式更新约束。 目前有更好的解决方案 Editor -> Embed In -> View without inset

以上是关于如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?的主要内容,如果未能解决你的问题,请参考以下文章

如何将附件视图背景设置为与 UItableViewCell 中的内容视图相同的背景?

如何使添加到 UITableViewCell 内容视图的 UIView 适合其范围?

通过情节提要删除 UITableViewCell 中内容视图的填充

如何通过 IBAction 更改 UITableViewCell 内容视图?

重新排序单元格时如何在 UITableViewcell 内容视图中添加图像?

如何让 UITableViewCell 调整高度以适应其内容?