我有一个第三方小部件,我想在我的控制器视图中自动布局。虽然我发现小部件在其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];
}
}