我正在制作一个具有 UIScrollView 的应用程序,该应用程序在关闭时会扩展到 280 的高度并收缩到 0 的高度。我使用了 ScrollView ,因为常规 View 在动画达到 0 高度后不会“隐藏”其 subview 。最初,在 ScrollView 发生任何动画之前, subview 会按预期响应触摸,但在 View 的高度完全动画化之后,所有 subview 都会停止响应用户触摸。我尝试确保所有 subview 的 zPosition 都大于 View Controller 中的任何其他 View ,所以这不是问题。看起来所有 subview 的框架都在其 super View 的框架内。以下是我的问题的视频链接:
以下是按下“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。对于此演示,我已经做到了,以便当应用程序第一次加载时, View 会展开,以便我可以演示 subview 在其 super View 的动画之前响应。此外,我用 ShadowView 来使其后面的 View 变暗,但它很明显位于 searchView 后面,所以这不是问题。
最佳答案
根据OP评论...
可能的问题是由于显式更改了 View 元素的框架,这些框架是使用自动布局约束设置的。常见问题,可能导致各种奇怪的错误/情况。
更改动画 View 折叠/展开方法以更改约束属性而不是显式帧更改解决了问题。
关于ios - UIScrollView 的 subview 不响应 ScrollView 高度动画后的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52062967/