2016-10-20 7 views
0

私はコントローラビューで自動レイアウトするサードパーティのウィジェットを持っています。私はウィジェットが手動でそのサブビューをinitWithFrame:メソッドでレイアウトしていることを発見しました。サブビューを手動でレイアウトするビューでautolayoutを使用するにはどうすればいいですか?

私は予想通りにウィジェットのフレームを作成できましたが、サブビューのフレームはZEROです。

どのようにそれらを混在させることができますか。ウィジェットを変更することはできません。 didLayoutSubivewsでは何もせず、ウィジェットインスタンスを作成する前に[self setNeedLayout][self layoutIfNeeded]を呼び出すことができます。これは、初期化時にサブビューをすぐにレイアウトするためです。

答えて

0

didLayoutSubviewsで何もできないと言う理由がわかりません。ウィジェットがinitWithFrameのビューのみを設定し、次元を再計算しない場合は、の場所しかないようです。私が見ることができる2つのオプションは次のとおりです。

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

関連する問題