所以我得到了这个UIScrollView,它具有对根视图宽度的常量和宽度约束的高度约束,但是当我在viewWillAppear()中设置断点时,我发现UIScrollView的宽度根本没有变化,无论什么样的手机(5s,7和7 Plus)我测试过。
我读到UIScrollView没有受到约束的影响,但为什么会出现这种情况呢?
StoryBoard Variable Watcher *请注意,我在iPhoneSE上运行,但imageScrollView的宽度为414,这是iPhone 7 Plus的屏幕宽度。
答案 0 :(得分:0)
根据我的理解,发生的情况是,加载视图,然后应用新的容器视图大小,之后重新计算约束并重新布置子视图,但是,当每个步骤时发生的有点不透明。
根据我的经验,调用viewDidAppear()时会有正确的大小,但在viewDidLoad()viewWillAppear()中,您可以从Interface Builder获得“设计时”大小。 didLayoutSubviews()也是一种可能性,但请记住,它可以在视图控制器的整个生命周期中多次调用。
“正确”的方法是始终使用Autolayout(使用Autolayout和UIScrollView有Technical Note),但是,它可能有点乏味。对于较少耐心的人,可以通过在容器视图上设置框架并调用updateConstraintsIfNeeded()和layoutIfNeeded()来应用大小,或者您可以根据UIWindow大小猜测元素的最终大小(请参阅UIView.window或UIApplication.keyWindow)父视图控制器视图的边界。
祝你好运!