【问题标题】:Add a subview from within and below another subview从另一个子视图的内部和下方添加一个子视图
【发布时间】:2014-06-10 20:48:27
【问题描述】:

在 iOS 应用程序中,我正在向我的主视图添加一个子视图:

[self.view addSubview:firstUIImageSubview];

但是在子视图类 firstUIImageSubview 中,我正在创建并添加另一个子视图 (secondUIImageSubview),我想将其放在第一个子视图下方:

[self insertSubview:secondUIImageSubview belowSubview:self];

我的问题是,当我想将第二个子视图显示在第一个子视图下方时,它会显示在它的上方。怎么可能做到这一点?谢谢。

【问题讨论】:

  • 你的问题和 Cocoa 有什么关系?
  • 这是 iOS 开发的 Objective-C/Cocoa 代码。
  • 我建议你在使用 Cocoa 这个词之前先弄清楚它是什么。

标签: ios objective-c xcode cocoa uiimageview


【解决方案1】:

这应该可以解决问题。

[self.superview insertSubview:secondUIImageSubview atIndex:0];

【讨论】:

    【解决方案2】:

    当您使用 insertSubview:belowSubview: 时,它会将子视图与特定对象管理的其他子视图相关。

    [self insertSubview:secondUIImageSubview belowSubview:self];

    没有多大意义。尽管 self 是 UIView (或子类),但它仍然不应该将自己作为子视图进行管理。因此

    [self insertSubview:secondUIImageSubview belowSubview:firstUIImageSubview];
    

    可能是你想要的。但请记住,这只会将 secondUIImageSubview 放在 firstUIImageSubview 的 Z-Index 之下(它是屏幕上的深度)。如果您希望它物理放置在 firstUIImageSubview 下方(即它的 XY 坐标),那么您需要使用子视图的框架或设置它的原点来设置它的位置(例如通过操纵它的中心或锚点)。

    【讨论】:

    • 谢谢。我在下面的意思是z-index。但是在你的建议中,我怎么能找到'firstUIImageSubview'知道这段代码在firstUIImageSubview类里面?
    • 如果您希望 secondUIImageSubview 由第一个管理,那段代码应该只在 firstUIImageSubview 中。在这种情况下,深度并不重要,因为 second 是 first 的一部分。听起来您打算让两个子视图都由视图控制器管理(毕竟这就是它存在的原因)。 ViewController 将引用两个子视图,您可以通过这种方式设置深度。
    • @LaurentCrivello 而 BayPhillip 的解决方案确实有效。它使您无法实际控制深度。如果您坚持保持设计原样,我建议您执行 [self.superview insertSubview:secondUIImageSubview belowSubview:self],但我强烈建议您重新考虑您的设计并更好地了解视图层次结构和面向对象的设计实际上应该如何工作。这将为您以后省去很多麻烦。
    • 我同意@Literphor。 UIVIewController 中的视图不应管理 UIViewController 中的另一个视图。将该逻辑留在实际控制器中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多