ios- webView和WKWebView图片超出边界处理办法

https://www.jianshu.com/p/5331aef351e0   

ios- webView和WKWebView图片超出边界处理办法

代码:

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    

    self.titleLabel.text = self.model.name;

    

    self.myScrollView.delegate = self;

    

    self.backBtnTopLayout.constant = StatusBarHeight;

    self.backBtnHeightLayout.constant = self.navigationBarHeight;

    

    self.bannerView.autoScrollTimeInterval = 5;

    self.bannerView.bannerImageViewContentMode = UIViewContentModeScaleAspectFill;

    self.bannerView.backgroundColor = [UIColor whiteColor];

    

    // WKWebView的配置

    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];

    // Webview的偏好设置

    configuration.preferences = [[WKPreferences alloc] init];

    configuration.preferences.minimumFontSize = 10;

    configuration.preferences.javaScriptEnabled = YES;

    // 默认是不能通过JS自动打开窗口的,必须通过用户交互才能打开

    configuration.preferences.javaScriptCanOpenWindowsAutomatically = NO;

    

    //设置网页自适应屏幕宽度

    NSString *jScript = @"`var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta)`;";

      

    WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart|WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

    WKUserContentController *wkUController = [[WKUserContentController alloc] init];

    [wkUController addUserScript:wkUScript];

    configuration.userContentController = wkUController;

    

    

    

    self.myWebView = [[WKWebView alloc] initWithFrame:CGRectMake(CGRectGetMinX(self.detailLabel.frame), CGRectGetMaxY(self.detailLabel.frame)+ValueOfScaleHeight(23), CGRectGetWidth(self.detailLabel.frame)+ValueOfScaleHeight(5), SWidth) configuration:configuration];

    self.myWebView.backgroundColor = [UIColor whiteColor];

    self.myWebView.navigationDelegate = self;

    self.myWebView.scrollView.scrollEnabled = NO;

    self.myWebView.clipsToBounds = YES;

    [self.detailLabel.superview addSubview:self.myWebView];

    

    self.bannerView.imageURLStringsGroup = self.model.imageList;

    self.nameLabel.text = self.model.name;

    if (([self.model.price doubleValue]==0)) {

        self.priceLabel.text = [NSString stringWithFormat:@"%ld积分", (long)self.model.integral];

    } else if (self.model.integral==0) {

           self.priceLabel.text = [NSString stringWithFormat:@"¥%@", self.model.price];

    } else {

        self.priceLabel.text = [NSString stringWithFormat:@"¥%@+%ld积分", self.model.price, (long)self.model.integral];

    }

 

    

    [self.myWebView loadHTMLString:self.model.detail baseURL:nil];

 

    NSString *js = @"function imgAutoFit() { \

       var imgs = document.getElementsByTagName('img'); \

       for (var i = 0; i < imgs.length; ++i) {\

          var img = imgs[i];   \

          img.style.maxWidth = %f;   \

       } \

    }";

    js = [NSString stringWithFormat:js, [UIScreen mainScreen].bounds.size.width];

 

    //注入js 到html中

    [self.myWebView evaluateJavaScript:js completionHandler:nil];

    

    //调用

    [self.myWebView evaluateJavaScript:@"imgAutoFit()" completionHandler:nil];

 

 

 

    

}

#pragma mark - wk navigation delegate

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

    

//    NSString *js = @"function imgAutoFit() { \

//       var imgs = document.getElementsByTagName('img'); \

//       for (var i = 0; i < imgs.length; ++i) {\

//          var img = imgs[i];   \

//          img.style.maxWidth = %f;   \

//       } \

//    }";

//    js = [NSString stringWithFormat:js, [UIScreen mainScreen].bounds.size.width + 20];

//

//    //注入js 到html中

//    [self.myWebView evaluateJavaScript:js completionHandler:nil];

//

//    //调用

//    [self.myWebView evaluateJavaScript:@"imgAutoFit()" completionHandler:nil];

 

 

    //获取webView的高度

    DefineWeakSelf;

    [self.myWebView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {

        CGRect webViewFrame = weakSelf.myWebView.frame;

        webViewFrame.size.height = [result doubleValue];

        weakSelf.myWebView.frame = webViewFrame;

        weakSelf.detailViewHeightLayout.constant = CGRectGetMaxY(weakSelf.myWebView.frame)+ValueOfScaleHeight(21);

        

        

        AFTER(0.5, ^{

            weakSelf.myScrollView.contentSize = CGSizeMake(SWidth, CGRectGetMaxY(weakSelf.myWebView.superview.frame));

        });

    }];

}

#pragma mark - scroll view delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    double topHeight = CGRectGetMinY(self.nameLabel.superview.frame);

    if (scrollView.contentOffset.y>=topHeight) {

        self.navigationBar.alpha = 1;

        self.backBtn.alpha = 0;

    } else {

        self.navigationBar.alpha = scrollView.contentOffset.y/topHeight;

        self.backBtn.alpha = 1-self.navigationBar.alpha;

    }

}

#pragma mark - 返回

- (IBAction)backBtnClicked:(UIButton *)sender {

    [QMHelper popViewController];

}

#pragma mark - 分享

- (IBAction)shareBtnClicked:(UIButton *)sender {

}

#pragma mark - 兑换

- (IBAction)replaceBtnClicked:(UIButton *)sender {

    [QMHelper pushWithController:[[BHIntegralReplaceVC alloc] initWithModel:self.model]];

}

posted @ 2019-11-21 15:49  super1250  阅读(608)  评论(0编辑  收藏  举报