Swift UIView 大小不正确

Posted

技术标签:

【中文标题】Swift UIView 大小不正确【英文标题】:Swift UIView size incorrect 【发布时间】:2014-10-27 23:44:39 【问题描述】:

我创建了一个带有自定义 xib 文件的 ViewController。 Insider 我有一个精心放置的名为holderView 的视图,并带有适当的约束:

在控制器中,我有以下代码:

override func viewDidAppear(animated: Bool) 
    super.viewDidAppear(animated)
    println(holderView.bounds)
    println(holderView.frame)

我得到的是这个值,而不是真正的值:

(0.0,0.0,320.0,568.0)
(0.0,0.0,320.0,568.0)

有人知道为什么会这样吗?我已经尝试了完全相同的代码并在普通的故事板中查看,它工作正常。 viewController 由 PageViewController 加载和附加。

【问题讨论】:

正确的值应该是(0,0,225.0,368.5) 我注意到在viewDidLoad 中使用view.layoutIfNeeded() 可以解决问题。这是正确的答案吗? 我不知道你为什么得到不正确的值。当我展示一个带有 xib 视图的视图控制器时,我在 viewDidAppear 中得到了正确的值。这个 xib 控制器是您应用的初始视图控制器吗? 它是从 PageViewController 加载的,它是初始视图控制器。 【参考方案1】:

自动布局会延迟绘制子视图的时间。看看这是否适用于获取视图尺寸:

override func viewDidLayoutSubviews() 
        println(self.holderView.frame.size)
    

可以使用高度、宽度等。

【讨论】:

我遇到了一个问题。 viewDidLayoutSubviews 应该调用多少次?它被调用了大约 50 次,然后应用程序崩溃了。 Neveermind,我正在向子视图添加一个视图,这就是我得到一个无限循环的原因。 我们可以将 viewDidAppear 重命名为 viewDidntReallyAppearYet 吗? :) 我这么说是因为如果它真的出现了,我们会看到错误的帧,不是吗?当然只是开玩笑。

以上是关于Swift UIView 大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 2.0 中获得正确的 UIView 大小或边界?

Swift - 根据大小屏幕设置 UIView 的大小

从 XIB 加载 UIView 大小不正确

UIView 使用自动布局调整大小,但在运行时获取其帧大小不正确 ios

Swift:动态 UIView 在调整大小后将 UIView 推到其下方

故事板约束不影响自定义 UiView 大小