现象
当小程序中使用第三方字体时,在 iPhone 11 和 iPhone 12 机型下
这个问题只能在几个特定的机型下出现,不用第三方字体也没有这个问题,安卓机型和开发者工具也重现不了,甚至 iPhone 12 mini 用同一版本也不能重现。
微信版本:7.0.18
小程序基础库:2.14.0
iOS:14.2
这未免也太奇怪了。
代码
代码片段地址:https://developers.weixin.qq.com/s/wgOVEgmQ7Cmz
wxml1 2 3 4 5 6 7 8 9 10 11 12
| <view class="page" wx-if="{{ ready }}"> <view class="text-left">左对齐文本</view> <view class="text-center">居中文本</view> <view class="text-right">右对齐文本</view> <view class="text-left">Left</view> <view class="text-center">Center</view> <view class="text-right">Right</view> <view class="text-left">123</view> <view class="text-center">456</view> <view class="text-right">789</view> <view class="center-line"></view> </view>
|
js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Page({ data: { ready: false }, onLoad () { wx.loadFontFace({ global: true, family: 'FZZhunYuan-M02S', source: 'url("http://localhost:9000/FZZhunYuan.ttf")', complete: (res) => { console.log('loading font status: ' + res.status) this.setData({ ready: true }) } }) } })
|
wxss1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| .page { display: flex; flex-direction: column; font-family: 'FZZhunYuan-M02S'; } .center-line { position: absolute; left: 50vw; width: 1px; height: 100vh; background-color: #ff0000; } .text-left, .text-center, .text-right { width: 80%; display: flex; background-color: #cccccc; margin: 20rpx auto; font-size: 50rpx; } .text-left { justify-content: flex-start; } .text-center { justify-content: center; } .text-right { justify-content: flex-end; }
|
分析
使用微信开发者工具真机调试功能,发现 text 的宽度只有正常的一半宽度,尝试设置 text 的宽度,因为 text 属于 inline 元素,所以没有效果……
于是乎,想到既然中文字正常,那我们只要在英文字中加入中文字符,是不是能解决问题呢?
解决办法
如果想让文字居中,就在文字左右各加一个全角空格“ ”
如果想让文字右对齐,就在文字右边加一个全角空格“ ”
其实就是,只要让文本不全是英文和数字,就不会出现问题。
(⊙﹏⊙)……说是解决办法,其实是一个 workaround,等着官方修复吧……
社区相应的 bug:https://developers.weixin.qq.com/community/develop/doc/0006cc3bd7056063605b97a2353c00