【问题标题】:Subview behind parent view within a ViewController?ViewController 中父视图后面的子视图?
【发布时间】:2012-08-14 14:09:06
【问题描述】:

是否可以在父视图后面显示子视图?显然,如果视图是兄弟,你可以这样做;然而,我的视图是 ViewController 层次结构的一部分,据我所知,一个 ViewController 不能有多个视图。

换句话说,我有这个层次结构:

ViewController
-->ViewController's view
------>subview

基本上,我只是希望“子视图”位于“ViewController 的视图”后面。这些都不是模态的——两个视图一直都在。

上下文:“ViewController 的视图”是基于 OGL 的应用程序的主视图。我需要在主视图后面显示一个恒定的背景(用户可选择)。

【问题讨论】:

  • 子视图通常被添加到视图堆栈的顶部,但是,这个问题有点令人困惑,你问如何在视图控制器的视图之上添加子视图,但是你说你想要在主视图后面添加背景......那么你到底想实现什么?
  • 子视图 在其父视图的“顶部”。此外,如果有意义的话,完全欢迎您将图层添加到视图层次结构中。没有规定 VC 的“主”视图需要做任何绘图。如果您实际上需要“主”视图的 2 个兄弟姐妹,它可以只是您的两个兄弟视图的容器。
  • 糟糕!我把那个问题写反了!我想要子视图父视图之后。

标签: ios uiview uiviewcontroller subview


【解决方案1】:

贾斯汀是对的,您的问题令人困惑,因为将视图 (1) 放在另一个视图 (2) 之上会掩盖原始视图 (1)。我想你的意思是问你是否可以在 viewController 的“主”视图“后面”或“下面”添加一个子视图。答案是否定的,您只能将子视图添加到“主”视图(视图控制器的视图属性)。

但是,只需将背景视图添加到主视图(视图控制器的视图属性),然后将其他视图添加到顶部即可。

顺便说一句,viewController 旨在控制多个视图(主视图及其子视图)。

【讨论】:

  • 一个viewController可以把多个视图当作兄弟吗?
  • 如果你有一个有两个孩子的主视图,这两个孩子将是彼此的兄弟姐妹。您还可以有一个主视图,其中有两个孩子是彼此的兄弟姐妹,每个孩子都可以有多个孩子,这些孩子将是彼此的兄弟姐妹等。我​​认为您想要一个具有背景视图作为子视图的主视图并且这是其他视图的父视图,它们是彼此的兄弟)。顺便说一句,当您添加放置在顶部的子视图时,您可以使用bringSubviewToFront 将子视图置于前面。
  • 对,那行得通。我将创建一个空视图并将其连接为 viewController 的直接后代;将主视图附加到空视图;并将背景视图附加到空视图。然后,主视图和背景视图将是同级的,并且可以重新排序。不过,我担心的是 viewController 与其直接后代之间存在“特殊”关系,并且将我的主视图移动到层次结构的更下方可能会破坏某些东西。我应该担心吗?
  • 让我扩展一下这个问题:viewController 是一个 GLKViewController,而主视图是一个 GLKView。
  • 如果是我,我唯一需要担心的是方向发生变化并确保在必要时正确重新定位所有内容,但如果您不嵌套多个视图控制器,这应该不是问题.
【解决方案2】:

创建你的背景视图,可能是 UIImageView 之类的,然后将其添加为子视图并将其移到后面。

UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourImage.png"]];
[backgroundImage setFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];

您可以使用sendSubviewToBack:bringSubviewToFront:insertSubview:aboveSubview:insertSubview:belowSubview:insertSubview:atIndex:exchangeSubviewAtIndex:withSubviewAtIndex: 来组织子视图的层次结构(谁在谁之上)。subviews 属性返回所有子视图的NSArray,以便它们出现在屏幕上。

【讨论】:

  • 这只适用于同级视图。我的背景是 viewController 的视图的子视图。我也想过,但是当我尝试时,子视图仍然在 viewController 视图的顶部。
  • 在我上面写的例子中,我将子视图添加到视图控制器的视图中。您是如何准确添加子视图的??
  • 展开。一个 viewController 有一个 view 并且每个 view 都有一个 NSArraysubviews 包含在该视图中。然后,最重要的是,每个subviews 都可以有自己的subviews 等。需要将这些同级内容放在这些术语中以更有意义。如果您将此添加为子视图,您要将其添加为子视图到哪个视图?您是否将其添加到视图控制器的视图中?还是您将其添加到视图控制器视图的子视图中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
相关资源
最近更新 更多