[英]UIWebView with dynamic height inside a UIScrollView in Objective-C
我正在嘗試使UIWebView具有“動態屏幕高度”。 該Web視圖位於UIScrollView內部,在其他組件下方。 查看布局(它使用自動布局):
我的想法是僅提供一個滾動條(從UIScrollView開始工作),並根據內容大小使WebView視口增長 。 並且它不起作用。
為了做到這一點,我做了什么:
在我的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和Web View委托
- (void)webViewDidFinishLoad:(UIWebView *)webView
獲取webview內容的高度webViewHeightConstraint.constant
如下所示設置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;
}
希望對您有幫助。
嘗試設置webView.frame = frame;
在viewDidLayoutSubviews()中
您可以使用webView.scrollView.contentSize.height
獲得Webview內容的內容大小。
然后您可以使用此webView.scrollView.contentSize.height
來設置webViewDidFinishLoad
方法中的滾動webViewDidFinishLoad
的contentSize
。
就像這樣在webViewDidFinishLoad
方法中
[objWebView setFrame:CGRectMake(objWebView.frame.origin.x, objWebView.frame.origin.y, objWebView.frame.size.width, webView.scrollView.contentSize.height)];
if(objWebView.frame.origin.y+objWebView.frame.size.height > objScrollView.contentSize.height) {
[objScrollView setContentSize:CGSizeMake(objScrollView.frame.size.width, objWebView.frame.origin.y+objWebView.frame.size.height)];
}
要為UIWebView設置動態高度,您需要在webViewDidFinishLoadView方法中設置高度
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat height = [[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
//For Width
//CGFloat width = [[webview stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue];
CGRect frame = webview1.frame;
frame.size.height = height;
//frame.size.width = width; //Width
webview.frame = frame;
CGRect screenBounds = [UIScreen mainScreen].bounds ;
CGFloat widthForIpad = CGRectGetWidth(screenBounds) ;
CGFloat heightForIpad = CGRectGetHeight(screenBounds) ;
NSLog(@"The iPad width is - %fl",widthForIpad);
NSLog(@"The iPad height is - %fl",heightForIpad);
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
if ([[UIScreen mainScreen] bounds].size.height == 568)
scrollView.contentSize = CGSizeMake(320, height+370); //set your required height
else
scrollView.contentSize = CGSizeMake(320, height+350); //set your required height
}
else
{
if ([[UIScreen mainScreen] bounds].size.height == 1024)
scrollView.contentSize = CGSizeMake(320, height+370); //For iPad
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.