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 大小或边界?
UIView 使用自动布局调整大小,但在运行时获取其帧大小不正确 ios