Objective-C 中 UIScrollView 内具有动态高度的 UIWebView

mar*_*nta 2 iphone objective-c uiwebview uiscrollview ios

我正在尝试制作一个具有“动态屏幕高度”的 UIWebView。该 webview 位于 UIScrollView 内部,位于其他组件下方。查看布局(它使用自动布局):

在此输入图像描述

我的想法是只提供一个滚动(来自 UIScrollView - 它的工作)并使WebView 视口根据内容大小而增长。而且它不起作用。

我做了什么来尝试做到这一点:

  1. UIWebView 属性“缩放页面以适合”已打开;
  2. UIWebView 未分页;
  3. UIWebView 不允许用户交互。

在我的 UIViewController 中:

- (void) viewDidAppear:(BOOL)animated {
    NSString *urlString = @"MY URL GOES HERE";
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [_webViewDescription loadRequest:urlRequest];
    _webViewDescription.delegate = self;
    _webViewDescription.scrollView.scrollEnabled = NO;
    _webViewDescription.scrollView.bounces = NO;
}
Run Code Online (Sandbox Code Playgroud)

我的 UIWebViewDelegate:

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

    webView.frame = frame;


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

    _myScrollView.contentSize = webView.bounds.size;
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它会打印正确的 UIScrollView 大小和 UIWebView 大小。UIScrollView 高度变大,但 UIWebView 从第一次加载时保持相同的高度。

我正在真实设备中进行测试。

Sub*_*rma 5

向您的 webView 添加高度约束并制作一个 IBOutlet,例如

@property(strong, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint;
Run Code Online (Sandbox Code Playgroud)

加载您的网络视图并在网络视图委托中

- (void)webViewDidFinishLoad:(UIWebView *)webView
Run Code Online (Sandbox Code Playgroud)

获取 webview 内容高度并设置webViewHeightConstraint.constant 如下:-

    - (void)webViewDidFinishLoad:(UIWebView *)webView
{

    NSString *str = [webView stringByEvaluatingJavaScriptFromString:@"(document.height !== undefined) ? document.height : document.body.offsetHeight;"];
    CGFloat height = str.floatValue;
    webViewHeightConstraint.constant = height;

}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助你。