介绍
最近在做微信小程序时,顶部标题栏总是与胶囊对不齐。往往是在这款手机上对齐了,在另外一款手机差很多。我在查阅资料后,提出了一种方法解决这个问题,即:在页面onLoad或组件created时,利用微信小程序提供的API,获取系统状态栏高度和胶囊信息,进而动态调整顶部标题栏样式。在苹果、小米、荣耀手机做验证,能做到精准对齐。
理论
胶囊样式应该是垂直居中,有1px的border,border-radius为18px 。
若要使顶部标题栏与胶囊对齐,则其高度必须是导航栏高度,标题栏内容也要垂直居中,顶部标题栏的外边距或内边距必须是状态栏高度。
如果顶部标题栏内是一个输入框,为美观,输入框可以采用与胶囊相同的高、border。(注意这里不能使用rpx,因为胶囊border是写死的1px,不会变化)
示意如下:
计算方法
状态栏高度:wx.getSystemInfoSync(),使用statusBarHeight。
胶囊高度:wx.getMenuButtonBoundingClientRect(),使用返回的height。
导航栏高度:(胶囊top-状态栏高度)*2 + 胶囊高度。
注意:导航栏高度可能要考虑胶囊border(1像素),我这里没有仔细验证。
示意代码
//获取系统信息, 状态栏高度为 sysInfo['statusBarHeight'];
let sysInfo = wx.getSystemInfoSync();
// 胶囊信息
let menu = wx.getMenuButtonBoundingClientRect();
// 导航栏高度
let navBarHeight = (menu.top - sysInfo.statusBarHeight) * 2 + menu.height;
一些错误的处理方式
导航栏高度错以为是屏幕高度-窗口高度-状态栏高度,经过验证是错误的。
标题栏border采用了相对像素值,如rpx\upx等。这是错误的,应用px。