Ios 如何设置iPhone UIView z索引?
我想将一个视图移动到另一个视图的顶部,如何知道视图的z索引,以及如何移动到顶部?您可以使用视图层(它是Ios 如何设置iPhone UIView z索引?,ios,uiview,position,z-index,Ios,Uiview,Position,Z Index,我想将一个视图移动到另一个视图的顶部,如何知道视图的z索引,以及如何移动到顶部?您可以使用视图层(它是CALayer对象)的zPosition属性来更改视图的z索引 theView.layer.zPosition = 1; 如前所述,“大值在顶部。您可以使用任何想要的值,包括负值。”默认值为0 您需要导入QuartzCore框架才能访问该层。只需在实现文件的顶部添加这行代码 #import "QuartzCore/QuartzCore.h" UIView同级按添加到superview的顺序堆
CALayer
对象)的zPosition
属性来更改视图的z索引
theView.layer.zPosition = 1;
如前所述,“大值在顶部。您可以使用任何想要的值,包括负值。”默认值为0
您需要导入QuartzCore框架才能访问该层。只需在实现文件的顶部添加这行代码
#import "QuartzCore/QuartzCore.h"
UIView
同级按添加到superview的顺序堆叠。UIView
层次结构方法和属性用于管理视图顺序。在UIView.h中:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
同级视图在子视图
数组中从后向前排序。因此,最上面的视图将是:
[parentView.subviews lastObject];
[parentView.subviews objectAtIndex:0];
底部视图将是:
[parentView.subviews lastObject];
[parentView.subviews objectAtIndex:0];
正如Kolin Krevinkel所说,
[parentView-bringSubviewToFront:view]
会将视图置于顶部,但只有当视图都是层次结构中的同级视图时才会出现这种情况。如果您想通过XCode的界面生成器实现这一点,可以使用编辑器->排列下的菜单选项。在这里您可以找到“发送到前端”、“发送到后端”等。如果您使用的是cocos2d,您可能会看到[parentView bringSubviewToFront:view]存在问题,至少它对我不起作用。我没有将我想要的视图放在前面,而是将其他视图发回,这就成功了
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
IB和Swift 在流动布局中,黄色是超级视图,红色、绿色和蓝色是黄色的兄弟子视图 目标是将子视图(比如绿色)移动到顶部 在界面生成器中 在Interface Builder中,只需将要显示在文档大纲列表顶部的视图拖动到底部即可 或者,您可以选择视图,然后在菜单中转到编辑器>排列>发送到前端 迅速地 有两种不同的方法可以通过编程实现这一点 方法1
yellowView.bringSubviewToFront(greenView)
- 此方法是上述IB答案的编程等效方法
- 仅当子视图是彼此的兄弟视图时,它才起作用
- 子视图的数组包含在
中。在这里,yellowView.subview
将将子视图移动到前面
从索引绿色视图
移动到0
。这一点可以通过以下方式观察到:2
print(yellowView.subviews.indexOf(greenView))
greenView.layer.zPosition = 1
- 此方法只是将层的三维位置在z轴上移动得更高(更靠近用户)。由于所有其他视图的默认值为
,因此结果是0
看起来像是在顶部。但是,它仍然保留在greenView
数组的索引yellowView.subviews
。但是,这可能会导致一些意外的结果,因为像点击事件这样的事件仍然会首先进入索引号最高的视图。因此,使用上面的方法1可能更好0
- 可以将
设置为zPosition
(CGFloat.greatestfinitemagnity
,以确保其位于顶部CGFloat(FLT_MAX)
我们可以在ios中使用zPosition 如果我们有一个名为salonDetailView的视图 例如:
@ibdetailview:UIView代码>
并具有用于GMSMapView的UIView
例如:@IBOutlet弱var映射视图ui:GMSMapView代码>
显示mapViewUI上方的视图的步骤
使用下面的zPosition
salonDetailView.layer.zPosition = 1
还是用这个
- (void)insertSubview:(UIView *)view belowSubview:(UIView*)siblingSubview;
正如所说,作为一个助手,大的值是“在顶部”。您可以使用任何想要的值,包括负值。如果您希望视图始终位于顶部,则此解决方案会更好。只需将zPosition设置为MaxFloat我刚刚了解到层的zPosition和UIView的输入处理程序位于两个不同的Z顺序上。当你点击“通过”时真的很奇怪视图的superview必须相同才能使zPosition
工作吗?我注意到,即使视图在顶部,点击也会通过它到达下面的对象。这应该被认为是一个bug。我正试图找到一个通用的方法来避免这个问题,而不必显式地禁用任何发生在下面的视图的用户交互。。。我花了8个小时想弄明白。yellowView。bringSubviewToFront(greenView)工作得很好。有趣的是,容器视图并不尊重这一点!似乎你必须在代码中手动移动它们。感谢你解释移动实际索引和更改z索引的区别,这似乎更像是一个表面性的更改。btnDOWN.superview?.bringSubview(toFront:btnDOWN)请在你的答案中直接在这里发布照片和代码,为了让OP更容易得到它。作为一个初学者,StackOverflow不允许我这么做。对不起。您可以检查问题图像如果Arrange中的选项被禁用怎么办?