viewDidLayoutSubviews 中 UIScrollview 的帧不正确

Posted

技术标签:

【中文标题】viewDidLayoutSubviews 中 UIScrollview 的帧不正确【英文标题】:Incorrect frame of UIScrollview in viewDidLayoutSubviews 【发布时间】:2016-11-18 04:20:18 【问题描述】:

我正在使用 Xcode7.3.1。我的 ViewController 包含类似的结构 UIScrollview->UIView->UIScrollview。我正在为这些视图使用自动布局。我试图在viewDidLayoutSubviews 中打印我的内部滚动视图框架,但我没有得到确切的框架。在 viewController 的 xib 部分中,autoLayout 没有显示任何错误。 请帮我解决这个问题?

【问题讨论】:

实际上viewDidLayoutSubviews 调用了不止一次...所以您可能在第一次调用时检查了框架.. 如果您将代码从那里转移到viewDidAppear 会更好,这里它会被单次调用,并且帧会和你预期的一样 它不工作 那一定是你的自动布局约束有问题。 【参考方案1】:

我意识到这是一个相当老的问题,但我刚刚遇到了这个问题并找到了一个(hacky)解决方案。这似乎是 SDK 中的一个错误。发生的情况是滚动视图的内容没有像您期望的那样在viewDidLayoutSubviews 之前布置。所以我的解决方案是强制它。

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    scrollView.setNeedsLayout()
    scrollView.layoutIfNeeded()
    // now scroll view content should laid out as expected

【讨论】:

以上是关于viewDidLayoutSubviews 中 UIScrollview 的帧不正确的主要内容,如果未能解决你的问题,请参考以下文章

谁负责在自定义 UIViewController 容器中调用 viewWillLayoutSubviews()/viewDidLayoutSubviews()?

viewDidLayoutSubviews 中 UIScrollview 的帧不正确

自动布局中的 viewDidLayoutSubviews 与 UIPageViewController 上的旋转

为啥在 layoutsubviews/viewdidlayoutsubviews 中捕获的视图的屏幕截图不是最终在屏幕上呈现的?

自定义 UITableViewCell 的 viewDidLayoutSubviews

Swift:viewDidLayoutSubviews 是啥意思?