【问题标题】:Moving subviews from one view to another view without changing any position information in storyboard?将子视图从一个视图移动到另一个视图而不更改情节提要中的任何位置信息?
【发布时间】:2013-06-02 03:42:42
【问题描述】:

我有一个 iOS 应用程序,其中我在情节提要中创建了一些视图控制器,视图控制器的视图有一些子视图。现在我想在该视图中添加一些滚动视图并希望在该滚动视图中移动所有这些子视图。但问题是当我将这些视图拖到滚动视图时,界面构建器将这些子视图居中,所有位置信息丢失。

我不想让界面生成器这样做。没有任何适当的方法来解决这个问题吗?我已经搜索过这个问题并找到了这两个解决方案,但在我的情况下没有一个有用。

Adding a subview to the current view without messing up positioning of objects in the view 我无法使用此解决方案,因为这是在我想添加滚动视图时将视图添加到另一个视图中。

XCode - Is there a way to drag a component from one view to another without losing its frame? 这个解决方案对我也没有帮助,因为当我这样做时,情节提要文件被搞砸了。

【问题讨论】:

    标签: iphone ios interface-builder storyboard


    【解决方案1】:

    如果有人遇到这个问题,试图找到一种以编程方式执行此操作的方法(就像我所做的那样),这就是我最终使用的方法:

    for (UIView *view in [_viewAdd subviews]) {
        [_viewMain addSubview:view];
    }
    

    注意:addSubview 会从之前的 superview 中移除视图,因此无需为移除代码编写代码

    【讨论】:

      【解决方案2】:

      是的,有一个简单的方法可以做到这一点:

      第 1 步:选择您的观点

      第 2 步: 转到 编辑器 > 嵌入 > 滚动视图

      完成!

      附言。实际上,这是对视图进行分组的一种非常方便的方法。您可以将任何视图嵌入到“容器”视图中,将其移动到您喜欢的任何位置(甚至是跨场景),保留相对位置信息,然后您可以将其保留为一个组或取消嵌入它们。

      【讨论】:

      • 很好的答案!非常感谢 :) 我发现的一个小问题是,当我在滚动视图中嵌入子视图时,滚动视图宽度变为 340 而不是 320。因此,每个子视图 orgin.x 都变为 origin.x+10。当我手动将滚动视图宽度的大小从 340 更改为 320 时,子视图的 orgin.x 仍然是 origin.x+10。所以我必须手动更改 orgin.x 值。这也有解决方案吗?再次感谢您的出色技术:)
      • 嗨,我不确定我是否理解正确,但您必须注意两点:1. 每个UIView 的框架都相对于其父视图(因此当您嵌入视图时,框架是反映它们相对于滚动视图的位置)。 2. 以这种方式嵌入视图时,IB 会根据 Apple 的 HIG 自动添加填充。如果您想调整“容器”视图的大小而不更改其子视图的位置,您只需取消选中 IB 中的“自动调整子视图大小”。我希望这是有道理的......
      • 是的,你是对的。你已经按照我想要的方式理解了。我已经知道第一点。关于你的第二点“IB根据Apple的HIG自动添加一个填充。”,当我不想要这种行为时我应该怎么做?
      • 我想你取消选中“自动调整子视图”(在容器上)并设置一个新的大小(这样你在调整大小时不会影响子视图)
      • 哦,几个月前就知道了。非常感谢。挫折使我得到了这个答案,很高兴挫折导致学习!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      相关资源
      最近更新 更多