昨天實現ListView加載圖片時,出現了一個坑爹的問題,數據源如果在類里聲明好,加載無問題,但是用網絡請求獲取數據后,界面顯示圖片不全。
顯示沒問題時的數據源
const data = [{
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}];
...
constructor(props) {
super(props);
let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows(data),
};
}
...
顯示有問題時的數據源
...
constructor(props) {
super(props);
let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds,
};
}
...
// 獲取數據成功方法
getOrderPictureSuccessCallBack(result) {
if(result){
this.setState({
dataSource: this.state.dataSource.cloneWithRows(result),
});
}
}
...
查了很多資料,還是沒發現問題出在哪,后來將renderRow中的<Image>改為<Text>,還是顯示不全,但這時我滑動了屏幕,竟然顯示完全了,然后就去搜了下問題,果然有解決方案:在listView中添加removeClippedSubviews屬性。
<ListView
removeClippedSubviews={false}
dataSource={this.state.dataSource}
renderRow={this.renderRow}
contentContainerStyle={styles.listViewStyle}
/>
問題解決,再將<Text>換回<Image>。