我正在尝试制作一个具有“动态屏幕高度”的 UIWebView。该 webview 位于 UIScrollView 内部,位于其他组件下方。查看布局(它使用自动布局):
我的想法是只提供一个滚动(来自 UIScrollView - 它的工作)并使 WebView 视口(viewport)根据内容大小而增长。而且它不起作用。
我做了什么来尝试做到这一点:
- UIWebView 属性“缩放页面以适合”已启用;
- UIWebView 未分页;
- 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;
}
我的 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;
}
当我运行代码时,它会打印正确的 UIScrollView 大小和 UIWebView 大小。 UIScrollView 高度变大,但 UIWebView 从第一次加载时保持相同的高度。
我正在真实设备中进行测试。
最佳答案
向您的 webView 添加高度约束并制作一个类似的 IBOutlet
@property(strong, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint;
加载您的 WebView 并在 WebView 委托(delegate)中
- (void)webViewDidFinishLoad:(UIWebView *)webView
获取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;
}
希望对您有帮助。
关于ios - Objective-C 中 UIScrollView 内具有动态高度的 UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455282/