问答中心分类: IOS如何设置 iPhone UIView z 索引?
0
匿名用户 提问 16分钟 前

我想将一个视图移到另一个视图之上,我怎么知道视图的 z 索引,以及如何移到顶部?

8 Answers
0
Daniel says Reinstate Monica 回答 16分钟 前

您可以使用zPosition视图层的属性(它是CALayerobject) 来更改视图的 z-index。

theView.layer.zPosition = 1;

作为维克多·诺丁补充说,“大值是最重要的。你可以使用任何你想要的值,包括负值。”默认值为 0。
您需要导入 QuartzCore 框架才能访问该层。只需在实现文件的顶部添加这行代码即可。

#import "QuartzCore/QuartzCore.h"
Viktor Nordling 回复 16分钟 前

就像一个帮手一样,大价值观是“最重要的”。您可以使用任何您想要的值,包括负值。

Muhammad Hassan Nasr 回复 16分钟 前

如果您希望视图始终位于顶部,则此解决方案会更好。只需将 zPosition 设置为 MAXFLOAT

Stephen J 回复 16分钟 前

我刚刚了解到图层的 zPosition 和 UIView 的输入处理程序位于两个不同的 Z 顺序上。当您的点击“通过”时,这真的很奇怪

Hlung 回复 16分钟 前

视图的超级视图是否必须相同才能使zPosition作品?

MANIAK_dobrii 回复 16分钟 前

只是在透明度和渲染方面出现了奇怪的行为,我的顶部视图在底部闪烁着一些 UILabel 块,问题是我使用 CGFLOAT_MAX 作为 zPosition。 MAXFLOAT 为我解决了这个问题。

Bruce Patin 回复 16分钟 前

我注意到,即使视图在顶部,点击也会通过它到达下面的对象。这应该被认为是一个错误。我试图找到一种避免该问题的通用方法,而不必显式禁用恰好位于下方的任何视图的用户交互。

User 回复 16分钟 前

@BrucePatin 是的,响应者链似乎不受此影响,您找到解决方案了吗?我需要顶部的视图是交互式的:/

Joseph 回复 16分钟 前

使用_view.Layer.ZPosition = float.MinValue;没有将视图放在我的故事板上的项目后面。我不得不使用View.SendSubviewToBack(_view);为了那个原因。

0
Suragch 回答 16分钟 前

IB和斯威夫特
给定流动的布局,其中黄色是父视图,红色、绿色和蓝色是黄色的兄弟子视图,
视图 - 顶部的红色视图
目标是将子视图(比如说绿色)移动到顶部。
视图 - 顶部的绿色视图
在界面生成器中
在 Interface Builder 中,您需要做的就是将要显示在顶部的视图拖到 Documents Outline 列表的底部。
Interface Builder 中的视图顺序
或者,您可以选择视图,然后在菜单中转到编辑器 > 排列 > 发送到前面.
在斯威夫特
有几种不同的方法可以以编程方式执行此操作。
方法一

yellowView.bringSubviewToFront(greenView)
  • 此方法是上述 IB 答案的编程等效方法。
  • 仅当子视图是彼此的兄弟时才有效。
  • 子视图数组包含在yellowView.subviews.这里,bringSubviewToFront移动greenView从索引02.这可以观察到
    print(yellowView.subviews.indexOf(greenView))

方法二

greenView.layer.zPosition = 1
  • 此方法只是将图层的 3D 位置在 z 轴上移得更高(更靠近用户)。因为默认是0对于所有其他视图,结果是greenView看起来它在上面。然而,它仍然保持在指数0yellowView.subviews大批。但是,这可能会导致一些意想不到的结果,因为诸如点击事件之类的事情仍然会首先到达索引号最高的视图。出于这个原因,使用上面的方法 1 可能会更好。
  • zPosition可以设置为CGFloat.greatestFiniteMagnitude(CGFloat(FLT_MAX)在旧版本的 Swift 中)以确保它位于顶部。
MizAkita 回复 16分钟 前

谢谢你…我花了 8 个小时试图解决这个问题。 YellowView.bringSubviewToFront(greenView) 工作得很好。

Fattie 回复 16分钟 前

有趣的是,容器视图不尊重这一点!看来,您必须在代码中手动移动它们。

Jan 回复 16分钟 前

感谢您对移动实际索引或更改 z-index 的区别的解释,这似乎更像是一种外观变化。

0
Kolin Krewinkel 回答 16分钟 前
[parentView bringSubviewToFront:view] ;
0
larspars 回答 16分钟 前

如果你想通过 XCode 的 Interface Builder 来做到这一点,你可以使用 Editor->Arrangement 下的菜单选项。在那里你会找到“发送到前面”、“发送到后面”等。

mr5 回复 16分钟 前

如果排列中的选项被禁用怎么办?

0
Carter Medlin 回答 16分钟 前

在您想要带到顶部的视图中……(快速)

superview?.bringSubviewToFront(self)
Criss 回复 16分钟 前

btnDOWN.superview?.bringSubview(toFront: btnDOWN)