可以在[此处][1]找到解决方案。
应用程序从纵向到横向(反之亦然)的方向是一项任务,这听起来很容易,但当方向改变时必须改变视图时,在本机react中可能会很棘手。换句话说,通过考虑这两个步骤可以实现为两个方向定义不同的视图。
从 React Native 导入维度
import { Dimensions } from 'react-native';
识别当前方向并相应地渲染视图
/**
* Returns true if the screen is in portrait mode
*/
const isPortrait = () => {
const dim = Dimensions.get('screen');
return dim.height >= dim.width;
};
/**
* Returns true of the screen is in landscape mode
*/
const isLandscape = () => {
const dim = Dimensions.get('screen');
return dim.width >= dim.height;
};
了解何时更改方向以相应地更改视图
// Event Listener for orientation changes
Dimensions.addEventListener('change', () => {
this.setState({
orientation: Platform.isPortrait() ? 'portrait' : 'landscape'
});
});
组装所有部件
import React from 'react';
import {
StyleSheet,
Text,
Dimensions,
View
} from 'react-native';
export default class App extends React.Component {
constructor() {
super();
/**
* Returns true if the screen is in portrait mode
*/
const isPortrait = () => {
const dim = Dimensions.get('screen');
return dim.height >= dim.width;
};
this.state = {
orientation: isPortrait() ? 'portrait' : 'landscape'
};
// Event Listener for orientation changes
Dimensions.addEventListener('change', () => {
this.setState({
orientation: isPortrait() ? 'portrait' : 'landscape'
});
});
}
render() {
if (this.state.orientation === 'portrait') {
return (
//Render View to be displayed in portrait mode
);
}
else {
return (
//Render View to be displayed in landscape mode
);
}
}
}
由于为查看方向变化而定义的事件使用此命令“ this.setState() ”,因此此方法会自动再次调用“ render() ”,因此我们不必担心再次渲染它,这一切都已解决.