XCode – 有没有办法将组件从一个视图拖到另一个视图而不丢失其框架?

问题标题基本上说明了一切。 我想要做的就是在XCode的界面构build器中将一个组件/视图从一个超级视图拖到另一个超级视图上,而不必重新设置框架/位置。

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

另一个scheme

  1. 然后在你的子视图中select你想要的项目
  2. (在工具栏中)编辑器 – >embedded – >查看types来embedded。

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

任务是将“子视图”重新组合为“父视图”,使其成为父视图的子视图,并像在操作之前一样保留显示的物理位置。

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

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

它适用于OSX 10.8.2和Xcode 4.6。

祝你好运!

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

  1. 在界面生成器中添加父视图在同样的级别作为将子视图。
  2. 在文本编辑器中打开故事板,并在父视图的子视图标签内复制可能的子视图。 一旦你保存XCode将会更新。

虽然不是很优雅,但是看不出为什么XCode不支持Shift或者什么的。

  1. select你想从一个UIView移动到另一个UiView(不能是子)或ScrollView的所有控件

  2. 剪切/复制

  3. 现在将新的UIView / ScrollView拖到你现有的UIView中后,不要单击一下来select它,而是双击新的UIView / ScrollView并粘贴所有的控件。

  4. 所有控件之间的距离差异将保持不变,但可能需要重新定位控件。 所以,不要点击任何地方,直到你重新定位了这些,只要重新定位导航箭头的所有控件,因为这些都已经被选中,或者你可能会再次select。

注意:我在XCode 4.2上

我已经做了类似斯蒂芬的解决scheme,没有使用故事板。 在ViewController视图打开的情况下,在IB中:

  1. 除了VC的主视图之外,还可以创build另一个视图
  2. 将所有子视图从一个视图拖动到另一个视图(从左侧列表拖动重置其位置)。如果无法使用鼠标从IB中select它们,则从左侧的列表中select全部,然后使用“cmd”button从IB面板中select一个最终子视图。
  3. 把他们带回到最初的主视图的最后一个视图。
  4. 删除添加的视图,所有设置。

这是将子视图复制到另一个视图并保留位置的最佳解决scheme:

  1. 然后在你的子视图中select你想要的项目
  2. 编辑器 – >embedded – >查看
  3. 复制这个视图(Cmd + C)
  4. 撤消(Cmd + Z)(因为你只是想子视图)
  5. 转到你想要的子视图视图并粘贴(Cmd + V)
  6. select您复制粘贴的embedded视图,然后select编辑器 – >未插入

第6步将删除embedded视图,您将只复制子视图。

我发现了另一种方法。 基本上是:移动=剪切+粘贴

这样你就可以:

  • 让所有的子视图成为新父视图的子项(P')
  • 在基于自动布局的故事板中保留(几乎)所有的约束
  • 保持你的子视图的相对位置(框架)

这样你就不会:

  • 在文本编辑器中编辑Storyboard文件

基本的事情是除故事板中的一个(根)以外的每个视图都有其父视图 。 接下来,当您复制/移动多个子视图时,会丢失框架和约束

答案很简单。 您通过将他们的父视图(P)复制到新的父视图(P')来制作子视图(SV)的副本。 这样,您可能需要重新创build仅从新父视图(P')到其新父视图的约束,而不是您想要移动的每个子视图。

在您将父视图(P)复制到新视图(P')后,您可以:

  • 删除所有你想移动的孩子
  • 重新创build新的父(P')约束
  • 重新创build可能的Interface Builder出口到(SVs)

从原来的父视图(P)你:

  • 删除所有你想移动的孩子

之前:

视图1

视图2

P

SVS-你想做某些-MOVE

SVS-你-拒收想做某些举动

VIEW3

后:

视图1

视图2

P

SVS-你-拒收想做某些举动

VIEW3

P”

SVs'任您想对移动

我要强调的是,如果你有例如UIScrollView作为父视图,这不能很好地概括。 那么它的副本将再次是一个UIScrollView什么可能是不可取的。

另一件事是当你在原始父视图(P)中删除一些子视图(SV)时,如果其他(不可移动的子视图)引用它们,你可能需要重新创build一些约束。 但无论如何你应该这样做。