bringSubviewToFront将UIView移回原始位置

时间:2015-05-06 15:02:31

标签: ios swift uipangesturerecognizer

我有拖放手势的视图。如果用户在另一个视图上拖放视图,它将使用该视图切换位置。在拖动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 个答案:

答案 0 :(得分:3)

你已经指出了这个问题。想一想:

  • 自动布局定位视图。

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

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

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