bringSubviewToFront 将 UIView 移回原始位置

Posted

技术标签:

【中文标题】bringSubviewToFront 将 UIView 移回原始位置【英文标题】:bringSubviewToFront moves UIView back to original location 【发布时间】:2015-05-06 15:02:30 【问题描述】:

我有一个带有拖放手势的视图。如果用户将视图拖放到另一个视图上,它将与该视图切换位置。在拖动UIPanGestureRecognizer 方法期间,我使用self.view.bringSubviewToFront(sender.view!) 将拖动的视图置于其他视图之上。

但是当我在最近删除的视图上调用bringSubviewToFront 时,该视图将立即移回其原始位置。如果你关闭 AutoLayout,它就可以正常工作。

    func draggedViewHandler(sender:UIPanGestureRecognizer)

        if(sender.state == .Began)
        
            // If you drag the recently dropped view, this line will cause the view to jump back
            // to its original position that was layout in Autolayout.  If you turn off Autoview, it works fine.
            self.view.bringSubviewToFront(sender.view!)
        

        [additional code...]
    

这是 Swift 项目的完整工作副本。

https://github.com/duyn9uyen/SwiftDragAndDropAutoLayoutBug

【问题讨论】:

【参考方案1】:

你已经解决了这个问题。这样想:

自动布局定位视图。

您正在定位一个视图(在代码中)。

嗯,这两件事是冲突的。你不能做你正在做的事。

如果您想在代码中移动视图,当该视图也受到自动布局的影响时,您必须更改定位它的约束,以便自动布局将其定位到您想要的位置它。如果您要在视图上使用自动布局,那么在重新定位它时,您必须使用自动布局,而不是反对它。

【讨论】:

以上是关于bringSubviewToFront 将 UIView 移回原始位置的主要内容,如果未能解决你的问题,请参考以下文章

UIView bringSubviewToFront: *不*将视图带到前面

在 Ipad 滚动视图中使用bringSubviewToFront

viewDidLoad() 中的 addSubView() 和 bringSubViewToFront() 不起作用

bringSubviewToFront(_:) 函数破坏了 UIPanGestureRecognizer

bringSubviewToFront 不适用于下拉视图(UIView)

我将如何为bringSubviewToFront 编写 UIView 淡入动画