首页 文章

如何设置iPhone UIView z索引?

提问于
浏览
232

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

8 回答

  • 9

    如果你使用cocos2d,你可能会看到[parentView bringSubviewToFront:view]的问题,至少它不适合我 . 我没有将我想要的视图带到前面,而是将其他视图发回去,这就是诀窍 .

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

    我们可以在ios中使用zPosition

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

    In my case see the image

    GMSMapView 有UIView例如: @IBOutlet weak var mapViewUI: GMSMapView!

    要显示mapViewUI的View salonDetailView上部

    use zPosition as below

    salonDetailView.layer.zPosition = 1
    
  • 313

    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] 会将视图置于顶端,但只有视图是层次结构中的所有兄弟姐妹才会出现这种情况 .

  • 271

    您可以使用视图's layer (it' s CALayer 对象的 zPosition 属性来更改视图的z-index .

    theView.layer.zPosition = 1;
    

    Viktor Nordling添加时,"big values are on top. You can use any values you want, including negative values."默认值为0 .

    您需要导入QuartzCore框架才能访问该层 . 只需在实现文件的顶部添加此行代码即可 .

    #import "QuartzCore/QuartzCore.h"
    
  • 0

    IB and Swift

    鉴于流动的布局,黄色是超视图,红色,绿色和蓝色是兄弟的黄色子视图,

    views - red view on top

    目标是将子视图(让我们说绿色)移到顶部 .

    views - green view on top

    在Interface Builder中

    在Interface Builder中,您需要做的就是将您想要显示的视图拖到文档大纲中列表的底部 .

    order of views in Interface Builder

    或者,您可以选择视图,然后在菜单中转到编辑器>排列>发送到前面 .

    在斯威夫特

    有几种不同的方法可以以编程方式执行此操作 .

    Method 1

    yellowView.bringSubviewToFront(greenView)
    
    • 此方法是上述IB答案的程序化等效方法 .

    • 仅当子视图是彼此的兄弟姐妹时才有效 .

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

    print(yellowView.subviews.indexOf(greenView))
    

    Method 2

    greenView.layer.zPosition = 1
    
    • 此方法只是在z轴上将图层的3D位置移动得更高(更靠近用户) . 由于所有其他视图的默认值为 0 ,因此结果是 greenView 看起来像在顶部 . 但是,它仍然保留在 yellowView.subviews 数组的索引 0 处 . 但是,这可能会导致一些意想不到的结果,因为点击事件之类的内容仍将首先进入索引编号最高的视图 . 出于这个原因,最好采用上面的方法1 .

    • zPosition 可以设置为 CGFloat.greatestFiniteMagnitude (旧版Swift中的 CGFloat(FLT_MAX) )以确保它位于顶部 .

  • 4
    [parentView bringSubviewToFront:view] ;
    
  • 72

    如果要通过XCode的Interface Builder执行此操作,可以使用Editor-> Arrangement下的菜单选项 . 在那里你会找到“发送到前面”,“发送到后面”等 .

  • 81

    在视图中你想要带到顶部......(在swift中)

    superview?.bringSubviewToFront(self)
    

相关问题