WkwebView 横竖屏内容适配。

工程配置

1.项目需要支持横竖屏。需要在
企业微信截图_c110fd77-246e-4e78-a8ad-9f33b31868ff.png

勾选这几个选项。

2.代码实现

  • 在appdelegate 中新增一个属性


   var blockRotation: UIInterfaceOrientationMask = .portrait{
        didSet{
            if blockRotation.contains(.portrait){
                consoleLine(message: 222)
            
                //强制设置成竖屏
                UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
                is_portrait = true
            }else{
                consoleLine(message: 111)
                

                //强制设置成横屏
                UIDevice.current.setValue( UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
                
                 is_portrait = false
            }
        }
    }


  • appdelegate中实现 app支持的方向的方法
   func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        ///上面声明的属性
        return blockRotation
    }

  • 在相关页面进行调用 (我这边与 js交互使用的是 WebViewJavascriptBridge) 具体的用法可以百度
  //MARK: - 屏幕旋转
    /// 屏幕旋转
    /// html那边调用屏幕旋转方法,Swift这边获取到传递的参数 做相应的处理
    /// - Parameter jsonValue: <#jsonValue description#>
    func screenChange(_ jsonValue:JSON){
        let orientation = jsonValue["orientation"].intValue
        
        if orientation == 1 { /// 竖屏
            
            kAppdelegate?.blockRotation = .portrait
            
        }else{ ///横屏
            //进入下一页面,转换为横屏
            let rotation : UIInterfaceOrientationMask = [.landscapeLeft, .landscapeRight]
            kAppdelegate?.blockRotation = rotation
            
        }
    }
  • 在控制器中实现。
 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() //开始注册屏幕方向转换通知
        
        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) ///钉钉登录监听
        
        
        // Do any additional setup after loading the view.
    }
    @objc func deviceOrientationDidChange() {
        ///调整界面布局
        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{ ///横屏状态
            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() /// 结束通知
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
         setStatusBarHidden(false) //iphoneX 系列横屏后会将状态栏隐藏。所以这里主动调用下。
       
    }
    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)
    }
  • 常用常量定义
// 状态栏高度
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安全区域高度
let safeAreaHeight:CGFloat =  StatusBar_Height > 20 ? 34 : 0
/// 底部高度
let app_BottomHeight = 49 + safeAreaHeight
//MARK: - 判断机型是否是 iPhoneX

/**
 * -- 不能用屏幕高度去判断。因为app内部有涉及到横屏
 */
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
    }
}

/**
 * -- 设备相关
 */

let kAppdelegate = UIApplication.shared.delegate as? AppDelegate
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容