如何设置iPhone UIView z索引?

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

236480 次浏览

你可以使用视图层的zPosition属性(它是一个CALayer对象)来改变视图的z-index。

theView.layer.zPosition = 1;

正如维克多Nordling所添加的,“大值在顶部。你可以使用任何你想要的值,包括负值。”缺省值为0。

您需要导入QuartzCore框架来访问该层。只需在实现文件的顶部添加这行代码。

#import "QuartzCore/QuartzCore.h"
[parentView bringSubviewToFront:view] ;

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]会把视图带到顶部,但只有当视图在层次结构中都是兄弟视图时才会这样。

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

如果你正在使用cocos2d,你可能会看到[parentView bringSubviewToFront:view]的问题,至少它不适合我。我没有把我想要的视图放到前面,而是把其他视图放到后面,这样就成功了。

[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];

IB和Swift

在流动布局中,黄色是父视图,红色,绿色和蓝色是黄色的兄弟子视图,

views - red view on top .

目标是将子视图(假设为绿色)移动到顶部。

views - green view on top .

在接口生成器中

在界面构建器中,你所需要做的就是将你想要显示在文档大纲列表顶部的视图拖到底部。

order of views in Interface Builder

或者,你可以选择视图,然后在菜单中转到编辑器比;安排在发送到前台

在斯威夫特

有几种不同的方法可以通过编程来实现这一点。

方法1

yellowView.bringSubviewToFront(greenView)
  • 这个方法相当于上面的IB答案。

  • 只有当子视图是彼此的兄弟视图时才有效。

  • 子视图数组包含在yellowView.subviews中。这里,bringSubviewToFrontgreenView从索引0移动到2。这可以观察到

      print(yellowView.subviews.indexOf(greenView))
    

方法2

greenView.layer.zPosition = 1
  • 这个方法只是在z轴上移动层的3D位置更高(更接近用户)。由于所有其他视图的默认值是0,所以结果是greenView看起来像是在顶部。然而,它仍然保留在yellowView.subviews数组的0索引处。不过,这可能会导致一些意想不到的结果,因为像点击事件这样的事情仍然会首先进入索引号最高的视图。出于这个原因,使用上述方法1可能会更好。
  • zPosition可以设置为CGFloat.greatestFiniteMagnitude(在旧版本的Swift中是CGFloat(FLT_MAX)),以确保它在顶部。

在视图中,你想把它带到顶部… (迅速)< / p >

superview?.bringSubviewToFront(self)

我们可以在ios中使用zPosition

如果我们有一个名为salonDetailView的视图 @IBOutlet weak var salonDetailView: UIView!

在我的情况下,见图像

并有UIView为GMSMapView @IBOutlet weak var mapViewUI: GMSMapView!

mapViewUI . View中显示salonDetailView

使用zPosition如下所示

salonDetailView.layer.zPosition = 1

或者用这个

- (void)insertSubview:(UIView *)view belowSubview:(UIView*)siblingSubview;

根据在这里