2014-02-11 74 views
0

我有一个初始化的类,没有框架设置 - ClassA在下面。 ClassA的实例未设置为自动布局。它的框架是在稍后手动设置的。不过,我希望ClassA的子视图能够自动布局。问题是我无法找到正确的方式来做到这一点。如果我在layoutSubview被调用之前尝试设置约束(在框架被设置之前),约束将不会被验证。如果我尝试在layoutSubviews中调用Super后设置它们,我会得到这个iOS - 尝试在布局子视图上设置Autolayout子视图

执行-layoutSubviews后仍然需要自动布局。 GHTExerciseSetView的-layoutSubviews实现需要调用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

你可以用约束的子视图显示视图应该是什么样子吗?即应该如何布置子视图等... – Fogmeister

回答

0

我假设您的约束条件已正确配置。

initWithFrame:中创建视图层次后,请尝试发送updateConstraintsIfNeededself。在我自己的应用程序中这样做似乎解决了一些问题。

此外,updateConstraints可能会被多次调用,因此请确保您不会一遍又一遍地安装相同的约束。