【问题标题】:Subviews of UIScrollView not responding to touch following animation of Scroll View's heightUIScrollView 的子视图在滚动视图高度的动画之后没有响应触摸
【发布时间】:2019-02-03 09:19:00
【问题描述】:

我正在制作一个具有 UIScrollView 的应用程序,该 UIScrollView 展开到 280 的高度,并在关闭时收缩到 0 的高度。我使用了滚动视图,因为常规视图不会在动画到 0 高度后“隐藏”其子视图。最初,在滚动视图的任何动画发生之前,子视图会按预期响应触摸,但在视图的高度完全被动画化后,所有子视图都会停止响应用户触摸。我已经尝试确保所有子视图的 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 后面,所以这不是问题。

【问题讨论】:

  • “常规视图不会“隐藏”其子视图” ...您是否在“常规视图”上设置了 .clipsToBounds = true
  • @DonMag 让我用常规视图替换滚动视图,将 clipsToBounds 设置为 true 并回复您
  • @DonMag 将视图更改为具有 clipsToBounds 等于 true 的 UIView,虽然子视图现在消失了,但问题仍然存在,即当视图最初打开时,子视图是响应式的,但在关闭并重新打开后,它们不再响应触摸。
  • 如果您注释掉所有.isUserInteractionEnabled = false 行,按钮在关闭/打开时是否响应触摸?
  • 作为旁注,我不认为 .layer.zPosition 行正在做你认为他们正在做的事情...... .zPosition 属性与 控件的内部层,而不是视图/按钮/滑块等的“z-order”。

标签: ios swift uiview uiscrollview uiviewanimation


【解决方案1】:

根据 OP cmets...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多