我想把一个视图移到另一个视图的上方,我怎么知道视图的z索引,以及如何移到顶部?
当前回答
你可以使用视图层的zPosition属性(它是一个CALayer对象)来改变视图的z-index。
theView.layer.zPosition = 1;
正如维克多·诺德林(Viktor Nordling)补充的那样,“大价值是最重要的。你可以使用任何你想要的值,包括负值。”缺省值为0。
您需要导入QuartzCore框架来访问该层。只需在实现文件的顶部添加这行代码。
#import "QuartzCore/QuartzCore.h"
其他回答
你可以使用视图层的zPosition属性(它是一个CALayer对象)来改变视图的z-index。
theView.layer.zPosition = 1;
正如维克多·诺德林(Viktor Nordling)补充的那样,“大价值是最重要的。你可以使用任何你想要的值,包括负值。”缺省值为0。
您需要导入QuartzCore框架来访问该层。只需在实现文件的顶部添加这行代码。
#import "QuartzCore/QuartzCore.h"
[parentView bringSubviewToFront:view] ;
IB和Swift
在流动布局中,黄色是父视图,红色,绿色和蓝色是黄色的兄弟子视图,
目标是将子视图(假设为绿色)移动到顶部。
在接口生成器中
在界面构建器中,你所需要做的就是将你想要显示在文档大纲列表顶部的视图拖到底部。
或者,你可以选择视图,然后在菜单中选择编辑器>安排>发送到前面。
在斯威夫特
有几种不同的方法可以通过编程来实现这一点。
方法1
yellowView.bringSubviewToFront(greenView)
这种方法相当于上面的IB答案。 它只在子视图是彼此的兄弟视图时起作用。 子视图数组包含在yellowView.subviews中。这里,bringSubviewToFront将greenView从索引0移动到索引2。这可以观察到 打印(yellowView.subviews.indexOf(持续)
方法2
greenView.layer.zPosition = 1
This method just moves the 3D position of the layer higher (closer to the user) on the z-axis. Since the default is 0 for all the other views, the result is that the greenView looks like it is on top. However, it still remains at index 0 of the yellowView.subviews array. This can cause some unexpected results, though, because things like tap events will still go first to the view with the highest index number. For that reason, it might be better to go with Method 1 above. The zPosition could be set to CGFloat.greatestFiniteMagnitude (CGFloat(FLT_MAX) in older versions of Swift) to ensure that it is on top.
或者用这个
- (void)insertSubview:(UIView *)view belowSubview:(UIView*)siblingSubview;
根据这里
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;
兄弟视图在子视图数组中由后往前排序。所以最上面的视图是:
[parentView.subviews lastObject];
底部视图将是:
[parentView.subviews objectAtIndex:0];
就像Kolin Krewinkel说的,[parentView bringSubviewToFront:view]将把视图带到顶部,但只有当视图在层次结构中都是兄弟姐妹时才会出现这种情况。
推荐文章
- 是否有可能更新一个本地化的故事板的字符串?
- 以编程方式获取Bundle Identifier
- 为iPad和iPhone设计输入按钮
- 如何在我的iPhone应用程序中使用NSError ?
- 我的预发行应用已经在iTunes Connect中“处理”了一周多,这是怎么回事?
- Xcode iOS项目只显示“我的Mac 64位”,但不显示模拟器或设备
- Objective-C中的自动引用计数不能防止或减少什么样的泄漏?
- 在Xcode 9中如何从打开的多个模拟器中退出或关闭单个模拟器?
- 如何使用Swift播放声音?
- UINavigationBar自定义返回按钮没有标题
- 如何精确地以毫秒为单位记录方法的执行时间?
- 在整个UIWindow中获取UIView的位置
- 如何解散ViewController在Swift?
- 保存字符串到NSUserDefaults?
- 什么是NSLocalizedString等效在Swift?