如何在viewDidAppear之前使用view的frame正确布局

在viewDidAppear中可以正确获取view的frame,但是在这里面才开始布局的话,看起来会有延迟,很迟钝,而在viewWillAppear又无法获取正确的view的frame,那么如何在viewDidAppear之前布局呢。

我的解决方法:在viewWillLayoutSubViews最后一次调用的时候,可以获取到view正确的frame,那么只要调用该函数的时候进行布局。


import UIKit
enum MoreViewControllerType {
    case online
    case nearBy
}
class MoreViewController: BaseViewController {

    
    var vcManager: MyVCManagerView?
    var type = MoreViewControllerType.online
    let onlineVC: MatchOnlineViewController = {
       return MatchOnlineViewController.init(nibName: "MatchOnlineViewController", bundle: nil)
    }()
    let nearVC = MatchNearByViewController.init(nibName: "MatchOnlineViewController", bundle: nil)
    let vcTitles = [NSLocalizedString("线上赛", comment: ""), NSLocalizedString("附近赛事", comment:"")]
    private var isFirstLoad = true
    override func viewDidLoad() {
        super.viewDidLoad()
        initNavBar()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
 
    }
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        //因为该函数不止调用一次,所以每次调用都要先移除之前已经添加的,然后重新添加
        if vcManager != nil {
            vcManager?.removeFromSuperview()
            vcManager = nil
        }
        initUI()
    }
    private func initNavBar() {
        
        navigationItem.title = NSLocalizedString("赛程", comment: "")
        let leftItem = UIBarButtonItem.init(image: UIImage.init(named: "left_arrow"), style: .done, target: self, action: #selector(exitVC))
        leftItem.tintColor = UIColor.white
        navigationItem.setLeftBarButton(leftItem, animated: false)
    }
    @objc private func exitVC() {
        navigationController?.popViewController(animated: true)
    }
    private func initUI() {
        if vcManager == nil {
            vcManager = MyVCManagerView.init(frame: view.bounds)
            vcManager?.addVC([onlineVC, nearVC], withTitle: vcTitles, buttonViewWidth: 200)
            
            view.addSubview(vcManager!)
            switch type {
            case .nearBy:
                vcManager?.moveTo(1)
            default:
                break
            }
        }
    }
    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值