在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Scroll View的高度动画后,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,所以这不是问题。

答案

根据OP评论......

可能的问题是由于明确更改了视图元素的框架,这些框架是使用自动布局约束设置的。常见问题,并可能导致各种奇怪的错误/条件。

将动画视图折叠/展开方法更改为更改约束属性而不是显式帧更改可以解决问题。

以上是关于在Scroll View的高度动画后,UIScrollView的子视图不响应触摸的主要内容,如果未能解决你的问题,请参考以下文章

小程序scroll-view垂直滚动下设置高度问题

动态设置scroll-view高度

动态设置scroll-view高度

Scroll View 内的 ContentView 不增加高度

uniapp scroll-view基础用法

小程序页面高度不够用时,且无法改变高度