bringSubviewToFront 将 UIView 移回原始位置
bringSubviewToFront moves UIView back to original location
我有一个带有拖放手势的视图。如果用户将一个视图拖放到另一个视图上,它将与该视图交换位置。在拖动 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 中项目的完整工作副本。
你已经指出了这件事。这样想:
自动布局定位视图。
您正在定位视图(在代码中)。
好吧,这两件事是有冲突的。你不能做你正在做的事。
如果要在代码中移动视图,当该视图也受到自动布局的影响时,您必须更改定位它的约束,以便自动布局把它放在你想要的地方。如果您打算在视图上使用自动布局,那么在重新定位它时,您必须使用 自动布局,而不是反对它。
我有一个带有拖放手势的视图。如果用户将一个视图拖放到另一个视图上,它将与该视图交换位置。在拖动 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 中项目的完整工作副本。
你已经指出了这件事。这样想:
自动布局定位视图。
您正在定位视图(在代码中)。
好吧,这两件事是有冲突的。你不能做你正在做的事。
如果要在代码中移动视图,当该视图也受到自动布局的影响时,您必须更改定位它的约束,以便自动布局把它放在你想要的地方。如果您打算在视图上使用自动布局,那么在重新定位它时,您必须使用 自动布局,而不是反对它。