6

我正在使用自动布局在 IOS6 下重新编写应用程序,但在访问 UIView 子类的大小时遇到​​问题

@property (weak, nonatomic) IBOutlet MyView *myView1;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"myView1: %@",self.myView1);
}

UIView 的大小在 StoryBoard 中完全定义,但在我运行代码时显示为零。这是自动布局的待办事项,还是根本没有定义子视图?我在这里做错了什么吗?

4

2 回答 2

11

刚刚在这里找到了一个可能的答案。运行方法

[self.view setNeedsLayout];
[self.view layoutIfNeeded];

强制计算 UIViews 尺寸,导致预期值出现在日志中,并且 UIView 子类本身也知道。

于 2013-01-03T22:58:57.567 回答
0

我刚刚打印了subview的框架。

0viewDidLoad.

viewDidLayoutSubviews它在回调中有一个非零值。

在里面viewDidLoad你应该只期望视图控制器的值view不为零。内部viewDidLoad实际上是有时您添加子视图和东西的地方。因此,期望在您为其设置约束的回调中计算框架是不正确的。

基本上需要理解的是,首先绘制一个viewController,然后随着它的生命周期事件,它的子视图将被布局

于 2020-08-24T19:32:24.890 回答