我有这个子视图的顺序:
现在我需要将非常深的子子视图1 带到屏幕的最前面。我查看了文档,bringSubviewToFront
可能无法在这里工作,因为它只会将子视图提供给他的父母。将父级(子视图2)与它一起放在前面不是一个选项,因为它需要保持在子视图2之下。
重新排序是不可能的,它是一个依赖于图形的顺序,并且有许多绑定它的aniamtions。
答案 0 :(得分:6)
您可以尝试将其放在窗口上:
[[UIApplication sharedApplication].keyWindow addSubview: Subsubsubview1];
或使用以下方法来帮助重新排序:
insertSubview:atIndex:
insertSubview:aboveSubview:
insertSubview:belowSubview:
答案 1 :(得分:1)
您可以使用:
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
定义:
在视图层次结构中的另一个视图下插入视图。 该方法建立了一个强大的参考,以查看和设置其接收器的下一个响应者,这是它的新超级视图。 视图只能有一个超级视图。如果视图已经具有超视图并且该视图不是接收者,则此方法会在使接收器成为新的超级视图之前删除先前的超视图。
希望这有帮助。
答案 2 :(得分:1)
设置深埋子视图的标记:
[deeplyburiedSubview setTag:USE_A_DEFINED_CONSTANT_NOT_A_MAGIC_NUMBER];
然后在最顶层的视图中简单地调用:
[topMostView bringSubviewToFront:[topMostView viewWithTag:USE_A_DEFINED_CONSTANT_NOT_A_MAGIC_NUMBER]];
答案 3 :(得分:0)
Swift 3中的递归算法:
/// Brings deeply placed subview to the front of the parent view.
///
/// - Parameters:
/// - view: Subview that should be bringed to the top.
/// - toFront: Parent view on which top should be placed the subview.
func bring(view: UIView, toFront parentView: UIView) {
if !parentView.subviews.contains(view) {
view.superview?.bringSubview(toFront: view)
if let superview = view.superview {
bring(view: superview, toFront: parentView)
}
}
}
用法:
bring(view: subview2.subsubview2.subsubsubview1, toFront: parentViewController.view)