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 中捕获的视图的屏幕截图不是最终在屏幕上呈现的?