对于我当前的项目,我正在创建一个日记/日历类型组件,当用户单击查看该视图时,该组件会居中显示当天(日记视图)或当月(日历视图)。
我正在使用 ScrollView 来保存我的内容:
_getInitialOffset(h) {
const FIX = 75; //TODO: Make it less arbitrary
let percentToScroll = (this.props.viewedDate.month()+1)/12; //12 = number of months per year
let { height } = this.props;
let centerFix = height/2;
let contentHeight = h;
let yPos = contentHeight*percentToScroll - centerFix - FIX;
return (yPos > 0) ? yPos : 0;
}
render() {
var year = this.props.viewedDate.year();
var cal = Calendar.get(year);
var contentHeight = this.contentHeight;
return (
<View>
<View style={styles.daysOfWeek}>
{
Calendar.days().map(function(day, i) {
return <Text key={i} style={styles.dayHeader}>{day}</Text>;
})
}
</View>
<ScrollView
ref={ref => {this._scrollView = ref}}
style={{
height: this.props.height,
paddingTop: 15
}}
onContentSizeChange={(w, h) => {
this._scrollView.scrollTo({y: this._getInitialOffset(h), animated: false});
}}>
<Year year={year} calendar={cal}/>
</ScrollView>
</View>
);
}
Run Code Online (Sandbox Code Playgroud)
我试图让它在当月渲染时居中,但因为我当前的方法(使用 OnContentSizeChange)发生在渲染之后,所以有一个框架,用户会看到它不居中,这是糟糕的用户体验。
有没有办法在渲染之前/期间获取 ScrollView 组件的内容高度,或者延迟组件可见性直到 onContentSizeChange 方法触发之后?
| 归档时间: |
|
| 查看次数: |
24825 次 |
| 最近记录: |