在 viewDidLoad 中获取 IB 中的视图框架?

Posted

技术标签:

【中文标题】在 viewDidLoad 中获取 IB 中的视图框架?【英文标题】:get the frame of a view made in IB in viewDidLoad? 【发布时间】:2012-10-09 19:37:28 【问题描述】:

当我在 Interface Builder 中创建标签并将插座连接到 viewController 时,并将标签记录在 viewDidLoad 中,如下所示:

NSLog(@"label: %@",self.label);

它给了我一个 (0,0,0,0) 的框架。 self.view 给了我一个大于 0 的大小。一个旧程序的标签也给了我一个大于 0 的大小。它会将文本记录在标签中,所以它是正确的。这是 Xcode 4.5 的变化吗?如何访问我在 Interface Builder 中设置的框架?

这是日志:

UILabel: 0x754e1b0;帧 = (0 0; 0 0); text = '这是一个标签'; clipsToBounds = YES;不透明=否;自动调整大小 = TM+BM;用户交互启用 = 否;层=...

【问题讨论】:

【参考方案1】:

通常框架布局在viewDidLoad 中是不可靠的。在笔尖的情况下,这应该不是问题。您是否有机会使用 AutoLayout?

也请在viewWillAppear 中记录相同的值,这肯定会有正确的值。我通常使用viewWillLoad 来启动我的UI 元素,并使用viewWillLoad 来正确放置它们。

【讨论】:

viewWillAppear 给了我一个 0 的大小,但 viewDidAppear 给了我真正的大小。 谢谢!自动布局是问题所在。现在实际大小显示在 viewDidLoad 和 viewWillAppear 以及其他所有内容中。我得学习一下这个自动布局的东西。【参考方案2】:

试试这个:

NSLog(@"Label Frame: %@",NSStringFromCGRect(self.label.frame));

【讨论】:

您确定在Interface Builder中连接了标签吗?

以上是关于在 viewDidLoad 中获取 IB 中的视图框架?的主要内容,如果未能解决你的问题,请参考以下文章

向视图控制器添加初始化程序会导致 viewDidLoad 中的 outlet 为 nil

从 IB 加载视图

loadView和viewDidLoad有什么区别?

单个 IB 约束的简单编程修改不更新

在不使用 IB 的情况下添加 UIImageView 作为 UIViewController 的子视图

UIView 和 UILabel 在 IB 上创建,它们的出口在 viewDidLoad 中返回“nil”