WkwebView 橫豎屏內(nèi)容適配。

工程配置

1.項(xiàng)目需要支持橫豎屏她奥。需要在
企業(yè)微信截圖_c110fd77-246e-4e78-a8ad-9f33b31868ff.png

勾選這幾個選項(xiàng)怔蚌。

2.代碼實(shí)現(xiàn)

  • 在appdelegate 中新增一個屬性


   var blockRotation: UIInterfaceOrientationMask = .portrait{
        didSet{
            if blockRotation.contains(.portrait){
                consoleLine(message: 222)
            
                //強(qiáng)制設(shè)置成豎屏
                UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
                is_portrait = true
            }else{
                consoleLine(message: 111)
                

                //強(qiáng)制設(shè)置成橫屏
                UIDevice.current.setValue( UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
                
                 is_portrait = false
            }
        }
    }


  • appdelegate中實(shí)現(xiàn) app支持的方向的方法
   func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        ///上面聲明的屬性
        return blockRotation
    }

  • 在相關(guān)頁面進(jìn)行調(diào)用 (我這邊與 js交互使用的是 WebViewJavascriptBridge) 具體的用法可以百度
  //MARK: - 屏幕旋轉(zhuǎn)
    /// 屏幕旋轉(zhuǎn)
    /// html那邊調(diào)用屏幕旋轉(zhuǎn)方法,Swift這邊獲取到傳遞的參數(shù) 做相應(yīng)的處理
    /// - Parameter jsonValue: <#jsonValue description#>
    func screenChange(_ jsonValue:JSON){
        let orientation = jsonValue["orientation"].intValue
        
        if orientation == 1 { /// 豎屏
            
            kAppdelegate?.blockRotation = .portrait
            
        }else{ ///橫屏
            //進(jìn)入下一頁面功咒,轉(zhuǎn)換為橫屏
            let rotation : UIInterfaceOrientationMask = [.landscapeLeft, .landscapeRight]
            kAppdelegate?.blockRotation = rotation
            
        }
    }
  • 在控制器中實(shí)現(xiàn)愉阎。
 override func viewDidLoad() {
        super.viewDidLoad()
        myWebView.initData()
        view.addSubview(myWebView)
        ///初始的時候界面布局
        myWebView.snp.makeConstraints { (make) in
            make.top.equalToSuperview().offset(StatusBar_Height)
            make.right.bottom.left.equalToSuperview()
        }
        UIDevice.current.beginGeneratingDeviceOrientationNotifications() //開始注冊屏幕方向轉(zhuǎn)換通知
        
        NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationDidChange), name: UIDevice.orientationDidChangeNotification, object: nil)
        
        NotificationCenter.default.addObserver(self, selector: #selector(dingLogin_CallBack(_:)), name: NSNotification.Name(rawValue: ding_login_Success_noti), object: nil) ///釘釘?shù)卿洷O(jiān)聽
        
        
        // Do any additional setup after loading the view.
    }
    @objc func deviceOrientationDidChange() {
        ///調(diào)整界面布局
        if UIDevice.current.orientation == .portrait{ ///豎屏
            
            myWebView.snp.remakeConstraints { (make) in ///重做約束
                make.top.equalToSuperview().offset(StatusBar_Height)
                make.left.right.equalToSuperview()
                make.bottom.equalTo(view.snp.bottom)
            }
        }else{ ///橫屏狀態(tài)
            print("UIDevice.current.isX() == \(UIDevice.current.isX())")
            
            myWebView.snp.remakeConstraints { (make) in
                make.top.equalToSuperview().offset(StatusBar_Height)
                make.bottom.equalTo(view.snp.bottom)
                make.left.equalToSuperview()
                make.right.equalToSuperview().offset(-safeAreaHeight)
            }
            
        }
        
    }
    deinit {
        NotificationCenter.default.removeObserver(self)
        UIDevice.current.endGeneratingDeviceOrientationNotifications() /// 結(jié)束通知
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
         setStatusBarHidden(false) //iphoneX 系列橫屏后會將狀態(tài)欄隱藏绞蹦。所以這里主動調(diào)用下。
       
    }
    func setStatusBarHidden(_ hidden:Bool){
        
        let statusBar:UIView = (UIApplication.shared.value(forKey: "statusBarWindow") as! UIView).value(forKey: "statusBar") as! UIView
        statusBar.isHidden = hidden
    }
    override var prefersStatusBarHidden: Bool {
        return false
    }
    override func viewWillAppear(_ animated: Bool) {
        
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
        
        view.frame = UIScreen.main.bounds
        
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }
  • 常用常量定義
// 狀態(tài)欄高度
let StatusBar_Height = UIApplication.shared.statusBarFrame.height

///適配iPhoneX
let distanceTop:CGFloat = (UIDevice.current.isX() ? 88 : 64)

let distanceBottom:CGFloat = (UIDevice.current.isX() ? 34 : 0)



let navHeight:CGFloat = 44
///頂部高度
let app_TopHeight = StatusBar_Height + navHeight
///iPhoneX安全區(qū)域高度
let safeAreaHeight:CGFloat =  StatusBar_Height > 20 ? 34 : 0
/// 底部高度
let app_BottomHeight = 49 + safeAreaHeight
//MARK: - 判斷機(jī)型是否是 iPhoneX

/**
 * -- 不能用屏幕高度去判斷榜旦。因?yàn)閍pp內(nèi)部有涉及到橫屏
 */
extension UIDevice {
    func isX()->Bool {
        if #available(iOS 11, *) {
            if let w = UIApplication.shared.delegate?.window,
                let window = w, window.safeAreaInsets.left > 0 || window.safeAreaInsets.bottom > 0 {
                return true
            }
        }
        return false
    }
}

/**
 * -- 設(shè)備相關(guān)
 */

let kAppdelegate = UIApplication.shared.delegate as? AppDelegate
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幽七,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溅呢,更是在濱河造成了極大的恐慌澡屡,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咐旧,死亡現(xiàn)場離奇詭異挪蹭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)休偶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門梁厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踏兜,你說我怎么就攤上這事词顾。” “怎么了碱妆?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵肉盹,是天一觀的道長。 經(jīng)常有香客問我疹尾,道長上忍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任纳本,我火速辦了婚禮窍蓝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘繁成。我一直安慰自己吓笙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布巾腕。 她就那樣靜靜地躺著面睛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尊搬。 梳的紋絲不亂的頭發(fā)上叁鉴,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音佛寿,去河邊找鬼幌墓。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的克锣。 我是一名探鬼主播茵肃,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袭祟!你這毒婦竟也來了验残?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤巾乳,失蹤者是張志新(化名)和其女友劉穎您没,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胆绊,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氨鹏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了压状。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仆抵。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖种冬,靈堂內(nèi)的尸體忽然破棺而出镣丑,到底是詐尸還是另有隱情,我是刑警寧澤娱两,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布莺匠,位于F島的核電站,受9級特大地震影響十兢,放射性物質(zhì)發(fā)生泄漏趣竣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一旱物、第九天 我趴在偏房一處隱蔽的房頂上張望遥缕。 院中可真熱鬧,春花似錦异袄、人聲如沸通砍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迹冤,卻和暖如春讽营,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泡徙。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工橱鹏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓莉兰,卻偏偏與公主長得像挑围,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糖荒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容