• 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]];

    }

  • 相关阅读:
    索引的结构和性能的关系
    TP5的多图上传
    TP5页面更改数字进行AJAX排序
    安装Git版本控制系统 以及Git Bash的基础命令
    tp5 前台 点击显示一个弹窗
    Tp5 (轮回) 多个富文本应用
    Tp5 (轮回) AJAX请求写搜索页面
    安装 SVN 服务器
    Tp5(轮回)------单图上传 运用AJAX 请求
    TP5中(通过一个表去取另一个表的相对应的名称)
  • 原文地址:https://www.cnblogs.com/supersr/p/11906138.html
Copyright © 2020-2023  润新知