• 【iOS】导航栏的显隐与self.view.height


    问题描述:

    页面A中控件tempView的展示依赖于self.view.height。

    tempView.y = self.view.height - tempView.height
    
    • 1

    页面A —> 页面B —> 页面A,tempView的位置高于预期位置,是bug,需要修复。

    分析:

    页面A中tempView的预期高度是646(对应self.view.height为896)
    bug高度是554(对应self.view.height为804)
    差值92
    所用测试机型号为 iPhoneXr,系统状态栏+系统导航栏高度正好是92。
    怀疑是导航栏隐藏的原因。

    又有信息:页面A隐藏系统导航栏,页面B显示系统导航栏。

    由页面A跳转到页面B:
    页面A的代码中:viewWillDisappear,此时获取到的self.view.height是896(即屏幕高度)
    页面B的代码中:setNavigationBarHidden:NO
    由页面B跳转回页面A:
    页面A的代码中:viewWillAppear,setNavigationBarHidden:YES,此时获取到的 self.view.height是804

    猜想:

    1)导航栏的高度影响 self.view.height 的值
    隐藏导航栏时,self.view.height = 屏幕高度
    显示导航栏时,self.view.height = 屏幕高度 - 导航栏高度

    2)在 viewWillAppear时,设置导航栏的显隐(setNavigationBarHidden:YES),但此时导航栏/self.view的布局不会立刻刷新,此时self.view.height(804)取决于导航栏设置前的状态(hide = NO)
    在 viewDidAppear 时,再获取 self.view.height,布局完成,为896

    研究方向

    但是,在viewWillAppear设置完导航栏显隐后,layoutIfNeeded/setNeedsLayout/layoutSubViews,再获取导航栏高度,仍为804
    接下来可以继续看下:
    viewWillAppear 和 viewDidAppear之间发生了什么事

    参考

    1)https://juejin.cn/post/7146450825257156638

    2)https://blog.csdn.net/xfy791206803/article/details/72782626?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-72782626-blog-88318094.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-72782626-blog-88318094.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=3

  • 相关阅读:
    跑一跑NeuralAnnot
    提升网络质量:UDPspeeder 实现网络优化与提速
    Python sort面试题目
    xxe漏洞——无回显(ctfshow web374——378)
    win11开机音效设置的方法
    MySQL表的操作
    #Python&Pytorch 图片和谐化模型——BargainNet
    MAX98390CEWX D类放大器,集成动态扬声器管理(MAX98390)
    工作数字化的中国历程 | 从 OA 到 BPM 到数字流程自动化
    医院空调冷热源设计方案VR元宇宙模拟演练的独特之处
  • 原文地址:https://blog.csdn.net/weixin_47128888/article/details/127660168