我有一个初始化的类,没有设置框架 - 下面是ClassA。 ClassA的实例未设置自动布局。它的帧是稍后手动设置的。但是,我希望ClassA的子视图能够自动布局。问题是我无法找到正确的方法来做到这一点。如果我尝试在调用layoutSubview之前设置约束(在设置帧之前),则约束将不会验证。如果我在layoutSubviews中调用Super后尝试设置它们,我会得到这个
执行-layoutSubviews后仍需要自动布局。 GHTExerciseSetView的-layoutSubviews实现需要调用super。
如果我在调用Super之后尝试设置约束(无论如何都不正确),它似乎首先工作但是当我开始添加更多ClassA实例并重绘时,我遇到了更多的约束问题没有验证。主要问题是,以这种方式布局视图的正确方法是什么。感谢。
@interface ClassA ()
@property (nonatomic, strong) SubView1 *sub1;
@property (nonatomic, strong) SubView2 *sub2;
@end
@implementation ClassA
//this is called initially with no frame
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
sub1 = [[SubView1 alloc] init];
sub1.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubView:sub1];
//Same for sub2
}
return self;
}
- (void)layoutSubViews {
[super layoutSubViews];
}
- (void)updateConstraints {
[super updateConstraints];
//sub1 and sub2 constraints
}
答案 0 :(得分:0)
我假设您的约束正确配置。
在initWithFrame:
中创建视图层次结构后,尝试将updateConstraintsIfNeeded
发送到self
。在我自己的应用程序中执行此操作似乎解决了一些问题。
此外,updateConstraints
可能会被多次调用,因此请确保您不会一遍又一遍地安装相同的约束。