1. ホーム
  2. ios

[解決済み] UIWebViewのコンテンツサイズを決定する方法は?

2022-05-13 13:52:35

質問

私は UIWebView を異なる (単一ページの) 内容で表示します。を見つけたいのですが CGSize を見つけ、親ビューのサイズを適切に変更したいのです。明らかな -sizeThatFits: は残念ながら、webViewの現在のフレームサイズを返すだけです。

どのように解決するのですか?

最初に推測した -sizeThatFits: を使用した最初の推測は完全に間違っているわけではないことがわかりました。これは動作するようですが、webViewのフレームが、送信前に最小限のサイズに設定されている場合にのみ -sizeThatFits: . その後で、間違ったフレームサイズをフィッティングサイズで修正すればいいのです。これはひどいように聞こえますが、実際にはそれほど悪くありません。両方のフレームの変更を互いの直後に行うので、ビューは更新されず、ちらつきもありません。

もちろん、コンテンツが読み込まれるまで待つ必要があるので、このコードを -webViewDidFinishLoad: デリゲートメソッドに記述します。

Obj-C

- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}

Swift 4.x

func webViewDidFinishLoad(_ webView: UIWebView) {
    var frame = webView.frame
    frame.size.height = 1
    webView.frame = frame
    let fittingSize = webView.sizeThatFits(CGSize.init(width: 0, height: 0))
    frame.size = fittingSize
    webView.frame = frame
}

ここで指摘しておきたいのは 別のアプローチ (@GregInYEG に感謝) があります。どちらのソリューションがより良いパフォーマンスなのかはわかりません。

2つの厄介なソリューションのうち、私はこのソリューションがより好きです。