32

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

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

IB で階層を表示

望ましい機能は、コンテンツのサイズに応じて拡張されるコンテナ ビューです。UIWebView の高さを上げるために、次のコードを使用します。

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

私はさまざまな制約を試しましたが、最も合理的なものは次の とおり です
。つまり、UIWebView - UILabel (イベント日) および UILabel (イベント日) - UIButton) 4. コンテナ ビューの優先度は低い (1) そのスーパービューとの下部垂直スペースの制約


私が得る結果は次のとおりです。 ここに画像の説明を入力

UIWebView は展開しますが、イベントの日付ラベルとボタンを押し下げません。また、Container ビューも展開しません。

どんな助けでも大歓迎です。

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

4

2 に答える 2

73

webView の高さ制約を 266 に設定しています。これが、Web ビューの高さが固定されている理由です。

この高さの制約を 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;
}
于 2013-07-07T07:47:43.533 に答える
1

Webview のコンテンツ サイズを更新する前に、遅延が必要になる場合があります。また、組積造は自動レイアウトの使用に役立ちます。

-(void)webViewDidFinishLoad:(UIWebView *)webview{
    [self performSelector:@selector(checkContentOnDelay:) withObject:webview afterDelay:0.001];
}

-(void)checkContentOnDelay:(UIWebView *)webview{
    CGSize contentSize = webview.scrollView.contentSize;
    if (contentSize.height > 2) {
        [webview updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(contentSize.height);
        }];
    }else{
        [self performSelector:@selector(checkContentOnDelay:) withObject:webview afterDelay:0.01];
    }
}
于 2015-05-19T10:55:19.167 に答える