2016-10-20 49 views
0

我有我想在控制器視圖中自動佈局的第三方小部件。雖然我發現小部件在其initWithFrame:方法中手動佈局其子視圖。如何在手動佈局其子視圖的視圖上使用自動佈局

我只能像我期望的那樣製作小部件的框架,但是它的子視圖的框架是ZERO

我該如何將這些混合在一起。我無法修改小部件。在我創建小部件實例之前,我無法在didLayoutSubivews中執行任何操作,並且在調用[self setNeedLayout][self layoutIfNeeded]之前,因爲它在初始化時立即佈局其子視圖。

回答

0

我不知道你爲什麼說你什麼都不能做,在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]; 
    } 
} 
+0

嗯,看來這是唯一的解決方案。我認爲它會在修改我的代碼後生效。感謝您的回答。 – Tepmnthar