150 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
|  | // | |||
|  | //  H5Controller.swift | |||
|  | //  E-Wow | |||
|  | // | |||
|  | //  Created by dong on 2021/1/6. | |||
|  | // | |||
|  | 
 | |||
|  | import UIKit | |||
|  | import WebKit | |||
|  | 
 | |||
|  | /**
 | |||
|  |  导航栏默认显示,状态栏默认深色 | |||
|  |  */ | |||
|  | class H5Controller: H5BaseViewController { | |||
|  |     private var bgColor: UIColor = UIColor(hex: "#211A2B")//.purple//.white | |||
|  |     private var background = "#211A2B" | |||
|  |     private var naviTitleIgnoreAlpha = false | |||
|  | 
 | |||
|  |     // status | |||
|  |     private var h5StatusBarStyle: UIStatusBarStyle = .lightContent | |||
|  |      | |||
|  |     override func viewDidLoad() { | |||
|  |         super.viewDidLoad() | |||
|  | 
 | |||
|  |         // Do any additional setup after loading the view. | |||
|  |         setupViewsByBgColor(alpha: 1) | |||
|  |         navigationView.backButton.isHidden = false | |||
|  |          | |||
|  | //        navigationView.backButton.setImage(R.image.nav_back(), for: .normal) | |||
|  | //        webView.snp.remakeConstraints { make in | |||
|  | //            make.top.right.left.bottom.equalTo(self.view) | |||
|  | //        } | |||
|  | //        if #available(iOS 13.0, *) { | |||
|  | //            h5StatusBarStyle = .darkContent | |||
|  | //        }else{ | |||
|  | //        h5StatusBarStyle = .default | |||
|  | //        } | |||
|  | //        setNeedsStatusBarAppearanceUpdate() | |||
|  | 
 | |||
|  |         view.bringSubviewToFront(navigationView) | |||
|  | 
 | |||
|  |         webView.scrollView.delegate = self | |||
|  |     } | |||
|  | 
 | |||
|  |     private func setupViewsByBgColor(alpha: CGFloat) { | |||
|  |         navigationView.backgroundColor = bgColor.withAlphaComponent(alpha) | |||
|  |         navigationView.titleLabel.alpha = naviTitleIgnoreAlpha ? 1 : alpha | |||
|  |     } | |||
|  | 
 | |||
|  |     override var preferredStatusBarStyle: UIStatusBarStyle { | |||
|  |         return h5StatusBarStyle | |||
|  |     } | |||
|  | 
 | |||
|  |     override func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { | |||
|  |         super.webView(webView, didFinish: navigation) | |||
|  |         dlog("☁️webview didFinish: \(webView.url?.absoluteString ?? "null")") | |||
|  |         guard let urlPath = webView.url?.absoluteString else { | |||
|  |             return | |||
|  |         } | |||
|  | 
 | |||
|  |         adaptPageNavi(uri: urlPath, didFinish: true) | |||
|  |     } | |||
|  | 
 | |||
|  |     override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { | |||
|  |         super.webView(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler) | |||
|  | 
 | |||
|  |         guard let urlRequest = navigationAction.request.url?.absoluteString.removingPercentEncoding else { | |||
|  |             return | |||
|  |         } | |||
|  | 
 | |||
|  |         adaptPageNavi(uri: urlRequest) | |||
|  |     } | |||
|  | 
 | |||
|  |     private func adaptPageNavi(uri: String?, didFinish: Bool = false) { | |||
|  |         guard let uriStr = uri else { | |||
|  |             return | |||
|  |         } | |||
|  | 
 | |||
|  |         if uriStr.contains("activity/shoppingMall") { | |||
|  |             bgColor = .hexString("F04545") | |||
|  |             navigationView.titleLabel.textColor = .white | |||
|  |             naviTitleIgnoreAlpha = true | |||
|  |             setupViewsByBgColor(alpha: 0) | |||
|  |             if didFinish { | |||
|  |                 navigationView.backButton.setImage(R.image.nav_back_white(), for: .normal) | |||
|  |             } | |||
|  |             webView.evaluateJavaScript("document.body.style.backgroundColor=\"#F04545\"") { _, _ in | |||
|  |             } | |||
|  |         }  else { | |||
|  | //            navigationView.backButton.setImage(R.image.nav_back(), for: .normal) | |||
|  |             webView.evaluateJavaScript("document.body.style.backgroundColor=\"\(background)\"") { _, _ in | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     // MARK: - override | |||
|  | 
 | |||
|  |     override func handleInit(msg: JSSDKMessage) { | |||
|  |         super.handleInit(msg: msg) | |||
|  |         if let header = msg.header { | |||
|  | //            if let fontColor = header.fontColor { | |||
|  | //                navigationView.titleLabel.textColor = UIColor.hexString(fontColor) | |||
|  | //                if fontColor == "#FFFFFF" { | |||
|  | //                    navigationView.backButton.setImage(R.image.nav_back_white(), for: .normal) | |||
|  | //                } else { | |||
|  | //                    navigationView.backButton.setImage(R.image.nav_back(), for: .normal) | |||
|  | //                } | |||
|  | //            } | |||
|  |             if let background = header.background { | |||
|  |                 self.background = background | |||
|  |                 bgColor = UIColor.hexString(background) | |||
|  |                 setupViewsByBgColor(alpha: 1) | |||
|  |             } | |||
|  |             if header.transparent { | |||
|  |                 setupViewsByBgColor(alpha: 0) | |||
|  |                 webView.snp.remakeConstraints { make in | |||
|  |                     make.top.right.left.bottom.equalTo(self.view) | |||
|  |                 } | |||
|  |                 h5StatusBarStyle = .lightContent | |||
|  |                 setNeedsStatusBarAppearanceUpdate() | |||
|  |             } else { | |||
|  |                 webView.snp.remakeConstraints { make in | |||
|  |                     make.right.left.bottom.equalTo(self.view) | |||
|  |                     make.top.equalTo(navigationView.snp.bottom) | |||
|  |                 } | |||
|  |                 if #available(iOS 13.0, *) { | |||
|  |                     h5StatusBarStyle = .darkContent | |||
|  |                 } else { | |||
|  |                     h5StatusBarStyle = .default | |||
|  |                 } | |||
|  |                 setNeedsStatusBarAppearanceUpdate() | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | extension H5Controller: UIScrollViewDelegate { | |||
|  |     func scrollViewDidScroll(_ scrollView: UIScrollView) { | |||
|  |         // dlog("offset:\(scrollView.contentOffset.y)") | |||
|  |         if scrollView.contentOffset.y <= 60 && scrollView.contentOffset.y >= 0 { | |||
|  |             let aspect = scrollView.contentOffset.y / 60.0 | |||
|  |             setupViewsByBgColor(alpha: aspect) | |||
|  |         } else if scrollView.contentOffset.y > 60 { | |||
|  |             setupViewsByBgColor(alpha: 1) | |||
|  |         } else { | |||
|  |             setupViewsByBgColor(alpha: 0) | |||
|  |         } | |||
|  |     } | |||
|  | } |