UIScrollView的子视图无法响应以下滚动视图的动画动画

时间:2018-08-28 16:56:29

标签: ios swift uiview uiscrollview uiviewanimation

我正在制作一个具有UIScrollView的应用程序,该UIScrollView可以扩展到280的高度,并在关闭时收缩到0的高度。我使用滚动视图是因为常规视图不会在动画后将其子视图“隐藏”到0高度。最初,在对Scroll View进行任何动画处理之前,子视图将按预期的方式响应触摸,但是在完全对视图的高度进行动画处理之后,所有子视图都将停止响应用户的触摸。我已经尝试确保所有子视图的zPosition大于视图控制器中的任何其他视图,所以这不是问题。似乎所有子视图的框架都在其父视图的框架之内。以下是指向我的问题的视频的链接:

My Issue

这是按下我的“ parametersButton”时发生的代码:

@IBAction func parametersButtonPressed(_ sender: Any) {
    UIView.animate(withDuration: 0.25, animations: {

        if self.parametersExpanded {

            //Close searchView, make shadowView transparent
            self.searchView.frame.size.height = 0
            self.parametersButton.frame = self.parametersButton.frame.offsetBy(dx: 0, dy: -280)
            self.searchView.backgroundColor = UIColor.darkGray
            self.shadowView.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0)
        } else {

            //Expand the searchView, darken shadowView
            self.searchView.frame.size.height = 280
            self.parametersButton.frame = self.parametersButton.frame.offsetBy(dx: 0, dy: 280)
            self.searchView.backgroundColor = UIColor(red: 230/255, green: 230/255, blue: 230/255, alpha: 1)
            self.shadowView.layer.zPosition = 990
            self.shadowView.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.868)
        }
    }) { (bool) in
    }
}

请注意,在我的应用程序中,searchView最初是关闭的,即框架高度为0。对于此演示,我已经做到了这一点,以便当应用程序首次加载时,视图被展开,因此我可以演示子视图在其superView的动画之前响应。另外,我有一个shadowView用来使它后面的视图变暗,但是很明显,它位于searchView的后面,所以这不是问题。

1 个答案:

答案 0 :(得分:0)

根据OP评论...

可能的问题是由于显式更改了使用自动布局约束设置的视图元素的框架。常见问题,并且可能导致各种奇怪的错误/情况。

更改动画视图的折叠/展开方法以更改约束属性,而不是显式更改框架,从而解决了该问题。