ios – 实例化ViewController wxib时的帧大小不正确

ios – 实例化ViewController wxib时的帧大小不正确,第1张

概述我有一个视图控制器,看起来像: class SpotViewController: UIViewController { let spot: Spot init(spot: Spot) { self.spot = spot super.init(nibName: "SpotViewController", bundle: nil) } override func 我有一个视图控制器,看起来像:
class SpotVIEwController: UIVIEwController {  let spot: Spot  init(spot: Spot) {    self.spot = spot    super.init(nibname: "SpotVIEwController",bundle: nil)  }  overrIDe func vIEwWillAppear(animated: Bool) {    super.vIEwWillAppear(animated)    print("vIEwWillAppear: \(vIEw.frame)") # => (0.0,0.0,600.0,600.0)  }  overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    print("vIEwDIDLoad: \(vIEw.frame)") # => (0.0,600.0)  }}

当我通过让spotVIEwController = SpotVIEwController(spot:spot)实例化视图控制器并将其推送到导航控制器时,结果框架在vIEwDIDLoad和vIEwWillAppear中都是不正确的.它给了我(0.0,600.0)这是界面构建器中的大小.

为什么会发生这种情况以及使用xib实例化视图控制器以确保帧正确的正确方法是什么?

解决方法 这将解决您的问题,UIVIEwController从xib加载,在vIEwDIDLoad期间保持xib大小:
extension UIVIEwController {    public overrIDe class func initialize() {        struct Static {            static var token: dispatch_once_t = 0        }        if self !== UIVIEwController.self {            return        }        dispatch_once(&Static.token) {            pb_applyFixToVIEwFrameWhenLoadingFromNib()        }    }    @objc func pb_setVIEw(vIEw: UIVIEw!) {        // VIEw is loaded from xib file        if nibBundle != nil && storyboard == nil {            vIEw.frame = UIScreen.mainScreen().bounds            vIEw.layoutIfNeeded()        }        pb_setVIEw(vIEw)    }    private class func pb_applyFixToVIEwFrameWhenLoadingFromNib() {        UIVIEwController.swizzleMethodSelector(NSSelectorFromString("setVIEw:"),withSelector: #selector(UIVIEwController.pb_setVIEw(_:)))        UICollectionVIEw.swizzleMethodSelector(#selector(UICollectionVIEw.layoutSubvIEws),withSelector: #selector(UICollectionVIEw.pb_layoutSubvIEws))        UItableVIEw.swizzleMethodSelector(#selector(UItableVIEw.layoutSubvIEws),withSelector: #selector(UItableVIEw.pb_layoutSubvIEws))    }}extension UItableVIEw {    @objc private func pb_layoutSubvIEws() {        if dataSource == nil {            super.layoutSubvIEws()        } else {            pb_layoutSubvIEws()        }    }}extension UICollectionVIEw {    @objc private func pb_layoutSubvIEws() {        if dataSource == nil {            super.layoutSubvIEws()        } else {            pb_layoutSubvIEws()        }    }}
总结

以上是内存溢出为你收集整理的ios – 实例化ViewController w / xib时的帧大小不正确全部内容,希望文章能够帮你解决ios – 实例化ViewController w / xib时的帧大小不正确所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存