gpt4 book ai didi

react-native - React Native 中可调整大小的 Flex 布局

转载 作者:行者123 更新时间:2023-12-03 12:24:53 24 4
gpt4 key购买 nike

如何在 React Native 中创建可调整大小的布局?像这样:
enter image description here

这是一个演示,但适用于 ReactJS:
https://leefsmp.github.io/Re-Flex/index.html

最佳答案

我在实现目标的路上也遇到了这个问题,我解决了这个问题,如下所示。

希望这可以帮助其他有类似情况的人节省时间。

https://github.com/brucelin0325/resizable_layout

MyComponent.js

import React, { Component } from 'react'; 
import { StyleSheet, View, Dimensions, PanResponder, Animated } from 'react-native';

export default class MyComponent extends Component {

constructor(props) {
super(props);

this.state = {
offset : 0,
topHeight : 40, // min height for top pane header
bottomHeight : 40, // min height for bottom pane header,
deviceHeight : Dimensions.get('window').height,
isDividerClicked: false,

pan : new Animated.ValueXY()
}

}

componentWillMount() {
this._panResponder = PanResponder.create({
onMoveShouldSetResponderCapture: () => true,
onMoveShouldSetPanResponderCapture: () => true,

// Initially, set the Y position offset when touch start
onPanResponderGrant: (e, gestureState) => {
this.setState({
offset: e.nativeEvent.pageY,
isDividerClicked: true
})
},

// When we drag the divider, set the bottomHeight (component state) again.
onPanResponderMove: (e, gestureState) => {

this.setState({
bottomHeight : gestureState.moveY > (this.state.deviceHeight - 40) ? 40 : this.state.deviceHeight - gestureState.moveY,
offset: e.nativeEvent.pageY
})
},

onPanResponderRelease: (e, gestureState) => {
// Do something here for the touch end event
this.setState({
offset: e.nativeEvent.pageY,
isDividerClicked: false
})
}
});
}


render() {
return (
<View style={styles.content}>

{/* Top View */}
<Animated.View
style = {[{backgroundColor: 'pink', minHeight: 40, flex: 1}, {height: this.state.topHeight}]}

>
</Animated.View>

{/* Divider */}
<View
style={[{height: 10}, this.state.isDividerClicked ? {backgroundColor: '#666'} : {backgroundColor: '#e2e2e2'}]}
{...this._panResponder.panHandlers}
>
</View>

{/* Bottom View */}
<Animated.View
style={[{backgroundColor: 'green', minHeight: 40}, {height: this.state.bottomHeight}]}

>
</Animated.View>
</View>
)
}
}

const styles = StyleSheet.create({
content : {
flex : 1,
flexDirection: 'column'
},
})

关于react-native - React Native 中可调整大小的 Flex 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com