如何在手动布局子视图的视图上使用自动布局



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

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

我怎么能把它们混在一起。我不能修改这个小部件。在我创建小部件实例之前,我可以在我的didLayoutSubivews中做任何事情,并调用[self setNeedLayout] [self layoutIfNeeded],因为它在初始化时立即布局其子视图。

我不知道你为什么说你在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];
    }
}

最新更新