【问题标题】:Jerky behavior on UIView when hiding a UIStatusBar?隐藏 UIStatusBar 时 UIView 上的生涩行为?
【发布时间】:2014-08-08 20:16:50
【问题描述】:

我有一个放置在 UIScrollView 上的视图,该视图根据 UIScrollView 的内容偏移量移动。我通过在scrollViewDidScroll 中调整视图的垂直约束来实现这一点:

topViewTopConstraint.constant = -scrollView.contentOffset.y - topView.frame.height

topView 移动很大,直到不透明状态栏需要隐藏,也就是当它达到某个阈值时。在我的 VC 的scrollViewDidScroll 中,我使用以下代码实现了它

if -scrollView.contentOffset.y <= thresholdY {
                self.statusBarHidden = true
            } else {
                self.statusBarHidden = false
            }
            self.setNeedsStatusBarAppearanceUpdate()

当 Y 的 scrollView 的内容偏移量达到 thresholdY 时,topView 会抖动。

我已经在-scrollView.contentOffset.y 上记录了一个日志,它似乎在抽搐期间跳跃了 20 像素。知道为什么会发生这种情况吗?

【问题讨论】:

  • 我的猜测是,当您隐藏状态栏时,总屏幕尺寸发生了变化,因此操作系统正在相应地更新内容偏移量......您可能需要在代码中考虑当前屏幕尺寸,如果就是这样(Screensize,我的意思是你的滚动视图的父视图)。

标签: ios uiscrollview nslayoutconstraint


【解决方案1】:

topView 的约束是基于顶部的指导线吗?问题是顶部约束可能是根据顶部引导线的底部定义的,该底部是状态栏的底部。当您隐藏该行移动的状态栏时。因此,当偏移量达到您的阈值时,它会隐藏状态栏,然后使 if 语句不真实,从而重新打开状态栏,依此类推。

您可能可以定义与底部引导线相关的顶部约束或其他不变的东西。

【讨论】:

    【解决方案2】:

    对于今天在 Swift 中在 VC 中旋转滚动视图时遇到此问题的任何人,我通过在 viewWillTransition 中调用 scrollView.contentSize = size 来修复旋转到横向时的 20px 偏移量,就像这样

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
            super.viewWillTransition(to: size, with: coordinator)
            scrollView.contentSize = size
            scrollView.frame = CGRect(origin: .zero, size: size)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多