如果我们使用iOS系统的导航栏,自己设置titleView,leftItem和rightItem,当titleView长度达到一定时,push会出现titleView左右跳变的情况,本文将分析跳变原因及解决办法。
目录 - 建议顺序观看
导航栏的内部布局
在一个全新的APP,自定义导航栏的左中右后,查看布局,会发现,导航栏内部布局如下
设置了自定义leftItem,titleView和rightItem,在导航栏中,我们自定义的view都会被_UITAMICAdaptorView包裹,其中leftItem和rightItem在_UITAMICAdaptorView外还会包裹一层_UIButtonBarStackView,最后布局在_UINavigationBarContentView中。
在导航栏内部布局的左边块、中间块和右边块,以下简称ABC,整个屏幕宽为Width。
以下以iPhone XS Max为例,gap1为20,gap2为6。
安全区域
A不论宽度如何(包括为0),一定会距离左边gap1。
C不论宽度如何(包括为0),一定会距离右边gap1。
B就算再宽,也一定会距离A和C各gap2。
(A设置宽40,B设置宽414,C设置宽40)
当A和C宽度设为0时,B距离屏幕左右各(gap1+gap2)。
当A和C设置为nil时,B距离屏幕左右各12(gap3)。
对齐方式
当增加A的宽度时,A是以左边不动,右边增加来加宽的,B的宽度会因A宽度增加而压缩,A最宽不超过C.left-gap2*2。
当增加C的宽度时,C是以右边不动,左边增加来加宽的,B的宽度会因C宽度增加而压缩,C最宽不超过A.right-gap2*2。