2014-02-11 75 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可能會被多次調用,因此請確保您不會一遍又一遍地安裝相同的約束。