Я пытаюсь создать простую кнопку с плавающей панелью действий со значком плюса, и у меня возникли проблемы с правильным центрированием плюса в некоторых крайних случаях.Я просто использовал '\ uFF0B' в <Text>
, но попытался переключиться на react-native-vector-icons
, только чтобы обнаружить, что они тоже использовали шрифт, а не изображение для поддержки экземпляров <Icon>
, и что мои проблемы кажутсядля сохранения.
На большинстве экранов и устройств все в порядке, но в некоторых случаях пользователи сообщают, что значок плюса не идеально отцентрирован.У меня есть гипотеза, что это может включать в себя опции доступности пользователей, увеличивающие размер шрифта в приложении сверх размера родительского представления.В любом случае, я могу воспроизвести что-то вроде скриншотов, которыми делятся со мной люди, установив fontSize
больше, чем lineHeight
.Предполагая, что это проблема -
Как вы центрируете один глиф в области просмотра <Text>
(или <Icon>
, так как это происходит от <Text>
), даже когда fontSize
можетбыть намного больше, чем <Text>
lineHeight
или даже в целом height
?
. В приведенном ниже примере размер шрифта "+" в точности удваивает высоту строки, поэтому знак плюс центрируетсячмокните мазок в верхнем правом углу области просмотра, как если бы он находился в поле размером 112dp x 112dp;но вместо этого я хочу, чтобы он находился по центру мертвой точки 56dp x 56dp box с обрезанными руками.Кажется, что никакая комбинация атрибутов стиля не влияет на это, а просто контролирует положение <Icon>
в его родительском элементе.
В настоящее время :
Обычно:
Для шрифта увеличенного размера:
Код :
<View style={s.fabStyle}>
<TouchableOpacity onPress={()=>{this.onPlus()}}>
<Icon name="plus" style={s.fabText} />
</TouchableOpacity>
</View>
...
const s = StyleSheet.create({
fabStyle: {
position: 'absolute',
right: 16,
bottom: 16,
borderRadius: 28,
width: 56,
height: 56,
backgroundColor: styleConstants.color.primary,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
textAlign: 'center',
},
fabText: {
position: 'relative',
left: 0,
top: 0,
right: 0,
bottom: 0,
fontSize: 112,
color: '#fff',
textAlign: 'center',
lineHeight: 56,
width: 56,
height: 56,
},
});