Xcode - 有没有办法将组件从一个视图拖到另一个视图而不会丢失它的框架?

aro*_*oth 86 xcode interface-builder ios

我想要做的是在Xcode的界面构建器中将组件/视图从一个超级视图拖动到另一个超级视图,而不必重置其帧/位置.

执行此操作时,Xcode的默认行为似乎是使视图在其新的超视图中垂直和水平移动,同时保留其尺寸.这非常令人沮丧,因为这意味着需要在新的superview中手动重新定位视图.但是在我移动它之前我已经正确定位了,所以我希望Xcode能够记住它的框架的所有属性,而不仅仅是它的宽度/高度.这可能吗?

Jay*_*Jay 216

另一种方案:

  1. 然后在子视图中选择所需的项目
  2. (在工具栏中)编辑器 - >嵌入 - >视图类型嵌入.

  • 太糟糕了,任何自动布局约束都不会被复制,我见过的唯一方法是手动编辑xib的xml:http://indiestack.com/2013/12/transplanting-constraints/ (18认同)
  • 谢谢.这应该是公认的答案.选择要移动到新超级视图的所有视图 - >嵌入视图 - >将新容器视图移动到所需的超级视图 - >编辑器 - 未选中.瞧!所有视图都在新的超级视图中,具有正确的帧. (12认同)
  • @StevenKramer我尝试使用Command-X和Command-V,对我不起作用.你还有更多的步骤吗?我很感兴趣 (4认同)

ved*_*ano 28

我发现了一些可能对你有帮助的东西!

任务是将"子视图"重新组合为"父视图",以便它们成为父视图的子级,并且在操作之前保持显示的物理位置.

首先,调整父视图以物理覆盖子视图的区域.其次,确保所有孩子都在视图列表中显示出来.

现在用鼠标选择所有孩子并移动它们,例如向上一个像素和向下一个像素(只是说IB有一些变化).在那之后,孩子们和他们将神奇地成为父母的孩子并保持他们的位置展示.

它适用于OSX 10.8.2和Xcode 4.6.

祝好运!


Ste*_*uda 22

我设法节省了大量时间重新定位的东西,并做到了这一点:

  1. 在Interface Builder中添加与可能的子视图相同级别的父视图.
  2. 在文本编辑器中打开故事板,并将父视图的子视图标记内的可能子视图复制.保存后,XCode将更新.

虽然不是很优雅,但是看不出为什么XCode不支持Shift或其他东西.

  • 这是在Xcode 5中一直适用于我的唯一答案,没有大惊小怪."编辑 - >嵌入"似乎应该是正确的答案,但它并不总是列出我想将子视图移动到的视图. (3认同)

小智 10

  1. 选择要从一个UIView移动到另一个UiView(可能是孩子)或ScrollView的所有控件

  2. 剪切/复制

  3. 现在将新的UIView/ScrollView拖动到现有的UIView后,不要单击一次选择它,而是双击新的UIView/ScrollView并粘贴所有控件.

  4. 所有控件之间的距离差异将保持相同,但您可能需要再次重新定位控件.因此,在重新定位之前不要点击任何地方,只需按导航箭头重新定位所有控件,因为这些已全部选中,或者您可能再次选择它们.

注意:我在XCode 4.2上