2016-10-20 47 views
0

我有我想在控制器视图中自动布局的第三方小部件。虽然我发现小部件在其initWithFrame:方法中手动布局其子视图。如何在手动布局其子视图的视图上使用自动布局

我只能像我期望的那样制作小部件的框架,但是它的子视图的框架是ZERO

我该如何将这些混合在一起。我无法修改小部件。在我创建小部件实例之前,我无法在didLayoutSubivews中执行任何操作,并且在调用[self setNeedLayout][self layoutIfNeeded]之前,因为它在初始化时立即布局其子视图。

回答

0

我不知道你为什么说你什么都不能做,在didLayoutSubviews。如果小部件只在initWithFrame中设置其视图并且从不重新计算它们的尺寸,那么看起来就是只有的地方您可以做些什么。我可以看到两个选项:

1)您需要手动强制窗口小部件重新初始化,一旦您的视图约束得到满足。不是最好的。

- (void)didLayoutSubviews { 
    [super didLayoutSubviews]; 

    self.myWidget = [self.myWidget initWithFrame: self.myWidgetContainer.frame]; 
} 

2)只有在视图设置完成后才初始化小部件。

- (void)didLayoutSubviews { 
    [super didLayoutSubviews]; 

    if (!self.myWidget) {  
     self.myWidget = [self.myWidget initWithFrame: self.myWidgetContainer.frame]; 
     [self.myWidgetContainer addSubview:self.myWidget]; 
    } 
} 
+0

嗯,看来这是唯一的解决方案。我认为它会在修改我的代码后生效。感谢您的回答。 – Tepmnthar