簡體   English   中英

在Objective-C的UIScrollView內部具有動態高度的UIWebView

[英]UIWebView with dynamic height inside a UIScrollView in Objective-C

我正在嘗試使UIWebView具有“動態屏幕高度”。 該Web視圖位於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;
}

我的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方法中的滾動webViewDidFinishLoadcontentSize

就像這樣在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM