在超级视图中嵌入视图而不会丢失自动布局约束

You*_*sef 20 iphone interface-builder uiview ios autolayout

在ios应用程序中,我有一个自定义的UITableViewCell,里面有很多视图.我正在使用自动布局并根据需要设置所有约束.

但现在我需要有一个主视图(在内容视图中)并将所有其他视图放入其中(某种父视图).

这是我的单元格在界面构建器中的外观示例:

在此输入图像描述

它具有使用约束设置的所有视图.

我知道有一个xcode功能可以在父视图中嵌入选定的视图:

在此输入图像描述

所以我选择所有视图并选择将它们嵌入到视图中.我得到以下内容:

在此输入图像描述

我的问题

尽管视图已在superview中正确嵌入,但自动布局约束已被删除,现在我必须重新创建它们.

有没有办法可以将所有视图放在superview中并具有相同的自动布局约束,而无需重新创建它们?谢谢

gre*_*ner 11

正如上面的评论所述,这种方法对我很有用:

indiestack.com/2013/12/transplanting-constraints

简而言之,方法是:

  1. 为旧的superview提供一个restoreId,以便您可以轻松地在XML中识别它.
  2. 在文本编辑器视图中打开您正在使用的XIB/Storyboard.
  3. 将当前存在的内容复制并粘贴到备份文件中.
  4. 使用故事板将您的内容嵌入到新的超级视图中.不要设置任何新约束.
  5. 为新的superview提供一个还原ID,以便您可以在XML中轻松识别它.
  6. 使用您备份的旧故事板/ XIB并排打开当前的故事板/ XIB.
  7. 通过搜索还原ID在备份的XML中查找旧容器视图.复制<constraints></constraints><subviews></subviews>标签内的所有内容
  8. 在当前XML中查找新容器视图,<constraints></constraints><subviews></subviews>使用复制的内容替换其和标记的内容
  9. 进入旧XML并复制旧容器的ID.
  10. 进入新的XML,并将您从步骤9获得的旧ID替换为<constraints></constraints>您粘贴在其中的新容器的ID .
  11. 不要忘记向新容器添加与旧容器匹配的约束(在我的情况下,这会将新容器固定到超级视图的所有边缘).

警告:这将打破你可能设置的限制的任何出口.其他东西,观点等的出口......都没问题.


小智 7

  • 选择所有视图
  • 转到编辑器 -> 嵌入 -> 查看
  • 再次选择所有视图
  • 添加新约束,将顶部、底部、前导、尾随固定为 0

在此处输入图片说明


Gui*_*olo 0

您是否尝试过只创建容器视图的约束?您不需要重新创建所有约束。

由于失去了父级约束,它们看起来不正确。