我想将一个视图移到另一个视图之上,我怎么知道视图的z索引,以及如何移到顶部?
答案 0 :(得分:317)
您可以使用视图图层的zPosition
属性(它是CALayer
对象)来更改视图的z-index。
theView.layer.zPosition = 1;
正如Viktor Nordling添加的那样,“大值是最重要的。您可以使用您想要的任何值,包括负值。”默认值为0.
您需要导入QuartzCore框架才能访问该图层。只需在实现文件的顶部添加此行代码即可。
#import "QuartzCore/QuartzCore.h"
答案 1 :(得分:272)
UIView
兄弟姐妹按其添加到超级视图的顺序堆叠。 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;
兄弟视图在subviews
数组中排在前面。所以最顶层的视图将是:
[parentView.subviews lastObject];
和底部视图将是:
[parentView.subviews objectAtIndex:0];
像Kolin Krewinkel所说,[parentView bringSubviewToFront:view]
会将视图置于顶部,但只有视图是层次结构中的所有兄弟姐妹才会出现这种情况。
答案 2 :(得分:84)
IB和Swift
鉴于流动的布局,黄色是超视图,红色,绿色和蓝色是兄弟的黄色子视图,
目标是将子视图(让我们说绿色)移到顶部。
在Interface Builder中,您需要做的就是将您想要显示的视图拖到文档大纲中列表的底部。
或者,您可以选择视图,然后在菜单中转到编辑器>安排>发送到前面。
有几种不同的方式可以通过编程方式执行此操作。
方法1
yellowView.bringSubviewToFront(greenView)
子视图的数组包含在yellowView.subviews
中。在此处,bringSubviewToFront
将greenView
从索引0
移至2
。
print(yellowView.subviews.indexOf(greenView))
方法2
greenView.layer.zPosition = 1
0
,因此结果是greenView
看起来像在顶部。但是,它仍然保留在0
数组的索引yellowView.subviews
处。但是,这可能会导致一些意想不到的结果,因为点击事件之类的内容仍将首先进入索引编号最高的视图。出于这个原因,最好采用上面的方法1。zPosition
可以设置为CGFloat.greatestFiniteMagnitude
(旧版Swift中为CGFloat(FLT_MAX)
),以确保它位于最佳状态。答案 3 :(得分:72)
[parentView bringSubviewToFront:view] ;
答案 4 :(得分:19)
如果您想通过XCode的Interface Builder执行此操作,可以使用Editor-> Arrangement下的菜单选项。在那里你会找到“发送到前面”,“发送到后面”等等。
答案 5 :(得分:9)
在视图中,您希望将其带到顶部... (快速)
superview?.bringSubviewToFront(self)
答案 6 :(得分:4)
如果您使用的是cocos2d,您可能会看到[parentView bringSubviewToFront:view]出现问题,至少它不适用于我。
,而不是将我想要的视图带到前面,我将其他视图发回去[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
答案 7 :(得分:1)
我们可以在ios中使用zPosition
如果我们有一个名为 salonDetailView 的视图
例如:@IBOutlet weak var salonDetailView: UIView!
并具有用于 GMSMapView 的UIView
例如:@IBOutlet weak var mapViewUI: GMSMapView!
显示 mapViewUI
的View salonDetailView 上部按如下所述使用zPosition
salonDetailView.layer.zPosition = 1
答案 8 :(得分:0)