我创建了一个文本输入,其中输入的文本长度决定了文本的字体大小。
想法是制作类似于Instagram的方式:https://media.giphy.com/media/1AgCjLrT0XWhUh4UqY/giphy.gif
现在,这就是我的能力,可以使用户体验突然变差(原因是字体大小更新延迟):https://media.giphy.com/media/p37FFA1RhCuRHxIH2P/giphy.gif
这是我的代码:
render() {
let updatedFontSize = 32;
if(this.state.inputText.length > 0) {
updatedFontSize = 150 - 8*(this.state.inputText.length);
updatedFontSize = (updatedFontSize < 32 ? 32 : updatedFontSize);
}
return (
<TextInput
style={{ fontSize: updatedFontSize }}
onChangeText={ (inputText) => { this.setState({inputText}) } }
value={this.state.inputText}
multiline={true}
maxLength={25}
/>
)
}
答案 0 :(得分:0)
让我们考虑如何解决这个问题。
要求是:
基于gif的这些要求,我们可以提供一个干净的解决方案。
changeText = value => {
if (value.length > 3) {
if (
this.state.value.length < value.length &&
this.state.fontSize > MIN_FONT_SIZE
) {
this.setState(({ fontSize }) => ({ fontSize: fontSize - INCREMENT, value }));
} else if (
this.state.value.length > value.length &&
this.state.fontSize < MAX_FONT_SIZE
) {
this.setState(({ fontSize }) => ({ fontSize: fontSize + INCREMENT, value }));
}
}
};
这里是完整的示例https://snack.expo.io/@roach_iam/increasing-fontsize-textinput。