Skip to content

Commit 53135e9

Browse files
committed
Add headerImage props
1 parent c9b5e6d commit 53135e9

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ render() {
2828
<HeaderImageScrollView
2929
maxHeight={200}
3030
minHeight={MIN_HEIGHT}
31-
renderHeader={() => (
32-
<Image source={require('../assets/NZ.jpg')} style={styles.image} />
33-
)}
31+
headerImage={require('../../assets/NZ.jpg')}
3432
>
3533
<View style={{ height: 1000 }}>
3634
<TriggeringView onHide={() => console.log('text hidden')} >
@@ -54,6 +52,7 @@ The `HeaderImageScrollView` handle also the following props. None is required :
5452
| Property | Type | Default | Description |
5553
| -------- | ---- | ------- | ----------- |
5654
| `renderHeader` | `function` | Empty view | Function which return the component to use as header. It can return background image for example. |
55+
| `headerImage` | Image source Props (object or number) | `undefined` | Shortcut for `renderHeader={() => <Image source={this.props.headerImage} style={{ height: this.props.maxHeight, width: Dimensions.get('window').width }} />}` |
5756
| `maxHeight` | `number` | `80` | Max height for the header |
5857
| `minHeight` | `number` | `125` | Min height for the header (in navbar mode) |
5958
| `minOverlayOpacity` | `number` | `0` | Opacity of a black overlay on the header before any scroll |

src/ImageHeaderScrollView.js

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// @flow
22
import React, { Component } from 'react';
33
import PropTypes from 'prop-types';
4-
import { Animated, ScrollView, StyleSheet, View, Platform } from 'react-native';
4+
import { Animated, ScrollView, StyleSheet, View, Image, Dimensions } from 'react-native';
55
import type { ViewProps } from 'ViewPropTypes';
66
import type { FlatList, SectionList, ListView } from 'react-native';
77

@@ -12,6 +12,19 @@ type ScrollViewProps = {
1212
scrollEventThrottle: number,
1313
};
1414

15+
type SourceObjectProps = {
16+
uri?: ?string,
17+
bundle?: ?string,
18+
method?: ?string,
19+
headers?: ?{ [string]: string },
20+
body?: ?string,
21+
cache?: ?('default' | 'reload' | 'force-cache' | 'only-if-cached'),
22+
width?: ?number,
23+
height?: ?number,
24+
scale?: ?number,
25+
};
26+
type SourceProps = number | SourceObjectProps | SourceObjectProps[];
27+
1528
export type Props = ScrollViewProps & {
1629
children?: ?React$Element<any>,
1730
childrenStyle?: ?any,
@@ -28,6 +41,7 @@ export type Props = ScrollViewProps & {
2841
renderTouchableFixedForeground?: ?() => React$Element<any>,
2942
ScrollViewComponent: React$ComponentType<ScrollViewProps>,
3043
scrollViewBackgroundColor: string,
44+
headerImage?: ?SourceProps,
3145
};
3246

3347
export type DefaultProps = {
@@ -94,6 +108,21 @@ class ImageHeaderScrollView extends Component<Props, State> {
94108
});
95109
}
96110

111+
renderHeaderProps() {
112+
if (this.props.headerImage) {
113+
return (
114+
<Image
115+
source={this.props.headerImage}
116+
style={{
117+
height: this.props.maxHeight,
118+
width: Dimensions.get('window').width,
119+
}}
120+
/>
121+
);
122+
}
123+
return this.props.renderHeader();
124+
}
125+
97126
renderHeader() {
98127
const overlayOpacity = this.interpolateOnImageHeight([
99128
this.props.minOverlayOpacity,
@@ -118,7 +147,7 @@ class ImageHeaderScrollView extends Component<Props, State> {
118147

119148
return (
120149
<Animated.View style={[styles.header, headerTransformStyle]}>
121-
{this.props.renderHeader()}
150+
{this.renderHeaderProps()}
122151
<Animated.View style={overlayStyle} />
123152
<View style={styles.fixedForeground}>{this.props.renderFixedForeground()}</View>
124153
</Animated.View>

0 commit comments

Comments
 (0)