iOS 6 の自動レイアウトによる動的な UIView の高さ 質問する

iOS 6 の自動レイアウトによる動的な UIView の高さ 質問する

ここ数日、自動レイアウト制約を使用して、かなり単純な(少なくとも単純なはずの)レイアウトを実現しようとしていますが、成功していません。

私のビュー階層は次のとおりです:
UIScrollView
-- UIView (コンテナ ビュー)
-----UILabel (複数行ラベル)
-----UIWebView
-----UILabel
-----UIButton

IB の階層を表示

必要な機能は、コンテンツのサイズに応じてコンテナー ビューを拡張することです。UIWebView の高さを増やすには、次のコードを使用します。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self.webView sizeToFit];
} 

私はさまざまな制約を試しましたが、最も合理的なものは次のとおりです。1
. スーパービューから最初のラベル(イベントタイトル)の上部スペースを固定する
2. 最初のラベルとUIWebViewの垂直スペースを固定する
3. 残りの要素の垂直スペースを固定する(つまり、UIWebView - UILabel(イベント日付)とUILabel(イベント日付) - UIButton)
4. コンテナビューには、スーパービューとの優先順位が低い(1)下部の垂直スペース制約があります。

得られた結果は次のとおりです。ここに画像の説明を入力してください

UIWebView は拡張されますが、イベント日付ラベルとボタンは押し下げられず、Container ビューも拡張されません。

ご協力いただければ幸いです。

サンプルXcodeプロジェクトをダウンロードできますここから。

ベストアンサー1

WebView の高さ制約を 266 に設定しています。そのため、Web View の高さは固定されたままです。

この高さ制約は、IBOutlet として作成できます。例:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint;

そして、Web ビューがコンテンツのダウンロードを完了したときに、高さ制約の定数を変更できます。Web ビュー自体は内部にスクロール ビューで構成されているため、コンテンツの全体的な高さを取得する場合は、次のようにします。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    self.webViewHeightConstraint.constant = self.webView.scrollView.contentSize.height;
}

あるいは、どうやらこれも機能するようです:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self.webView sizeToFit];
    self.webViewHeightConstraint.constant = self.webView.frame.size.height;
}

おすすめ記事