Open creeperyang opened 7 years ago
Android
上 overflow
默认 hidden
且无法改变即超出容器部分被裁切,细节可看The overflow style property defaults to hidden and cannot be changed on Android。
iOS 可以支持 overflow: visible
等其它值,这点需注意。
Android
上字体偏下的问题第一张是iOS的,第二张是android的,可以看见,第二张的border和文字明显贴的过近。
inspect相应元素,可以发现,是android上文字在垂直方向上偏下。
解决:
{
paddingBottom: 4,
fontSize: 14,
lineHeight: 14,
height: 14
}
用paddingBottom
保证不会贴在一起,容忍android上损失一点还原度...
TouchableHightlight
必须注册 onPress
回调,否则不显示 underlayColor
详情见: https://github.com/facebook/react-native/issues/14908
<TouchableHighlight underlayColor="red">
</TouchableHighlight>
如果不注册 onPress
回调,TouchableHighlight
看起来手指按压时无反应,原因即:
_showUnderlay: function() {
- if (!this._isMounted || !this._hasPressHandler()) {
+ if (!this._isMounted) {
return;
}
flexbox
实现等宽布局如下,希望交通工具图标下面的实线/虚线可以等宽,且无法直接设置两者宽度。
一般情况下,好像没什么问题,直接设置flexGrow
即可。
line: {
flexGrow: 1,
height: 4,
backgroundColor: '#BDC6DB'
}
但问题是虚线的实现采用了很 trick 的方法:line
内部排列一个个小 View
,line
本身背景色透明。
这时有个严重问题,右侧虚线被撑开了,实现和虚线不再是等分的。
所以,在 dom 内部内容宽度可能很大时,怎么实现等分?
line: {
flexGrow: 1,
flexShrink: 1,
flexBasis: 0,
height: 4,
backgroundColor: '#BDC6DB'
}
以上即可解决:
flexBasis: 0
保证宽度计算都是从 0 开始,此时内容的宽度的影响就被去除; flexGrow: 1,flexShrink: 1,
保证始终等分。
Infinity
导致的 UI 问题<View style={styles.container}>
{
list && list.map(v => (
<View style={[styles.item, {width: WIDTH / list.length}]}></View>
))
}
</View>
如上,假设我们有个 list
要渲染(item
宽度平分 WIDTH
)。直觉看来上面的没有任何问题,并且在 iOS 上也的确没有任何问题。
但在 Android 上,由于 list
初始时可能是空数组(长度 0),所以初始时宽度设置为 {width: Infinity}
,当我们后面有数据了(长度大于 0),View
却始终不显示!
所以切记,任何时候不要在 Android 上设置 {width: Infinity}
或其它非法值。
布局和相关问题
1.
Android
中borderRadius
和border
冲突?Android
中当borderRadius
部分设置非0值(部分为0),border
将无效。手机:华为mate8 EMUI:4.1 android:6.0
iOS上正确的样式:
然后发现删除style
可正常显示border。
解决方案
把
border
放在两个按钮的父容器上。