在 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