如何在运行时获得故事板中创建的 UIView 的正确大小

How can I get the correct sizes for UIViews created in storyboard during runtime

我使用故事板创建了一个 UIView,设置了约束。当我 运行 应用程序时,界面看起来不错。视图按预期覆盖了整个屏幕(我将背景颜色设置为黑色,以便更容易看到发生了什么)。

http://contentlibrary.sinaapp.com/View%20from%20Storyboard.png(很抱歉,我必须这样 link 图片,但系统说我至少需要 10 次 post 图片。)

但是,当我尝试使用 myView.bounds.size 获取该视图的大小时。我得到 (600, 580),这正是故事板的大小检查器中显示的大小。

我在代码中创建了另一个 UIView

var myView = UIView(frame: CGRect(x: 0, y: 20, width: 600, height: 580))

并将其作为子视图添加到顶层视图。它出现了,但它并没有像我在情节提要中创建的视图那样覆盖整个屏幕。我在故事板和代码中创建的视图在 .bounds.size 中具有相同的值,但它们在屏幕上的大小似乎大不相同。 (这张图是代码创建的视图,看到屏幕下方有白色的space。)

http://contentlibrary.sinaapp.com/View%20from%20Code.png

另一个有趣的事情是,如果我用 UIScrollView 替换上面的 UIView,在滚动视图缩放后,它会更新到正确的大小。 我添加 UIScrollView 的方式与使用故事板添加 UIView 的方式相同。我试图在委托方法 scrollViewDidEndZooming:withView:atScale: 中打印它的大小。它显示 (375.0, 647.0),这是覆盖 iPhone 6.

上整个屏幕的视图的正确屏幕尺寸

由此看来,故事板中的视图似乎不会自动更新为正确的屏幕尺寸。

那么如何让故事板中创建的 UIView 对象更新其大小?

听起来您过早地检查尺寸。

尝试将您的代码放入 viewDidLayoutSubviews 方法中,看看它是否会发生变化。