【发布时间】:2018-06-26 21:22:47
【问题描述】:
我正在尝试使文本输入居中,其宽度是文本输入的长度。但是,当我使用 alignSelf: 'center' 或 alignItems: 'center' 时,文本输入在没有宽度的情况下是不可见的。
例如:
render() {
return <View style={{flex: 1}}>
<TextInput style={{alignSelf: 'center', minWidth: 1}}>
<View/>
}
这里的 minWidth 确保 textInput 可以被看到,但是当你输入它时它不会扩展。如果没有 width / minWidth,除非移除居中样式,否则不会看到 textInput。
几乎可行的解决方法示例:
constructor(props) {
super(props)
this.state = {
txt: ""
txtWidth: 0
}
}
render() {
return <View style={{flex: 1}}>
<TextInput
style={{minWidth: 1, alignSelf: 'center', width: this.state.txtWidth}}
value={this.state.txt}
onChange={txt=>this.setState({txt: txt.nativeEvent.text})}
/>
<Text
style={{position: 'absolute', right: 100000}}
onLayout={e=>this.setState({txtWidth:e.nativeEvent.layout.width})}
>
{this.state.txt}
</Text>
<View/>
}
随着文本输入接收输入,它的大小会变大并且效果很好。然而,有一件事阻止了它被充分证明。 emoji 的 e.nativeEvent.layout.width 值始终为 20。给定 emoji 的实际宽度不是 20。因此 txtWidth 不再是 textInput 的正确宽度,并且 textInput 的片段现在被切断。
有没有人为具有动态宽度的居中文本输入提出一个好的解决方案。我已经被这件事难住了太久了。如果需要,也很乐意提供说明。
谢谢!
【问题讨论】:
-
正则表达式表情符号并计算您的输入宽度
-
我仍然希望能够允许表情符号,所以正则表达式(我假设删除)并不能完全解决我的解决方案。但好建议!
-
我的意思是保留你的表情,稍后我会发布答案
-
我需要管理游标,所以可能不会那么快。
标签: javascript reactjs react-native