ここ数日、自動レイアウト制約を使用して、かなり単純な(少なくとも単純なはずの)レイアウトを実現しようとしていますが、成功していません。
私のビュー階層は次のとおりです:
UIScrollView
-- UIView (コンテナ ビュー)
-----UILabel (複数行ラベル)
-----UIWebView
-----UILabel
-----UIButton
必要な機能は、コンテンツのサイズに応じてコンテナー ビューを拡張することです。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;
}