@Fenny_fenny
Jika Anda tidak keberatan tidak menganimasikan ketinggian pada kecepatan yang sama persis dengan kemunculan keyboard, Anda dapat menggunakan LayoutAnimation, sehingga setidaknya ketinggian tidak melompat ke tempatnya. misalnya
import LayoutAnimation dari react-native dan tambahkan metode berikut ke komponen Anda.
getInitialState: function() {
return {keyboardSpace: 0};
},
updateKeyboardSpace: function(frames) {
LayoutAnimation.configureNext(animations.layout.spring);
this.setState({keyboardSpace: frames.end.height});
},
resetKeyboardSpace: function() {
LayoutAnimation.configureNext(animations.layout.spring);
this.setState({keyboardSpace: 0});
},
componentDidMount: function() {
KeyboardEventEmitter.on(KeyboardEvents.KeyboardDidShowEvent, this.updateKeyboardSpace);
KeyboardEventEmitter.on(KeyboardEvents.KeyboardWillHideEvent, this.resetKeyboardSpace);
},
componentWillUnmount: function() {
KeyboardEventEmitter.off(KeyboardEvents.KeyboardDidShowEvent, this.updateKeyboardSpace);
KeyboardEventEmitter.off(KeyboardEvents.KeyboardWillHideEvent, this.resetKeyboardSpace);
},
Beberapa contoh animasi adalah (Saya menggunakan pegas di atas):
var animations = {
layout: {
spring: {
duration: 400,
create: {
duration: 300,
type: LayoutAnimation.Types.easeInEaseOut,
property: LayoutAnimation.Properties.opacity,
},
update: {
type: LayoutAnimation.Types.spring,
springDamping: 400,
},
},
easeInEaseOut: {
duration: 400,
create: {
type: LayoutAnimation.Types.easeInEaseOut,
property: LayoutAnimation.Properties.scaleXY,
},
update: {
type: LayoutAnimation.Types.easeInEaseOut,
},
},
},
};
MEMPERBARUI:
Lihat jawaban @ sherlock di bawah ini, mulai react-native 0.11, pengubahan ukuran keyboard dapat diselesaikan menggunakan fungsionalitas bawaan.