@@ -123,6 +123,7 @@ const SegmentedControl: React.FC<SegmentedControlProps> = ({
123123 activeBadgeStyle,
124124 inactiveBadgeStyle,
125125 badgeTextStyle,
126+ renderTile,
126127} : SegmentedControlProps ) => {
127128 const width = widthPercentageToDP ( '100%' ) - containerMargin * 2 ;
128129 const translateValue = width / segments . length ;
@@ -190,22 +191,40 @@ const SegmentedControl: React.FC<SegmentedControlProps> = ({
190191 ...badgeTextStyle ,
191192 } ;
192193
194+ const flattenedTileStyle : ViewStyle = StyleSheet . flatten < ViewStyle > ( [
195+ styles . movingSegmentStyle ,
196+ defaultShadowStyle ,
197+ StyleSheet . absoluteFill ,
198+ {
199+ width : width / segments . length - 4 ,
200+ } ,
201+ tileStyle ,
202+ ] ) ;
203+
204+ const memoizedTile = React . useMemo < React . ReactNode > ( ( ) => {
205+ if ( renderTile ) {
206+ return renderTile ( {
207+ style : flattenedTileStyle ,
208+ transform : tabTranslateAnimatedStyles . transform ,
209+ width : translateValue ,
210+ } ) ;
211+ }
212+
213+ return (
214+ < Animated . View style = { [ flattenedTileStyle , tabTranslateAnimatedStyles ] } />
215+ ) ;
216+ } , [
217+ flattenedTileStyle ,
218+ renderTile ,
219+ tabTranslateAnimatedStyles ,
220+ translateValue ,
221+ ] ) ;
222+
193223 return (
194224 < Animated . View
195225 style = { [ styles . defaultSegmentedControlWrapper , segmentedControlWrapper ] }
196226 >
197- < Animated . View
198- style = { [
199- styles . movingSegmentStyle ,
200- defaultShadowStyle ,
201- tileStyle ,
202- StyleSheet . absoluteFill ,
203- {
204- width : width / segments . length - 4 ,
205- } ,
206- tabTranslateAnimatedStyles ,
207- ] }
208- />
227+ { memoizedTile }
209228 { segments . map ( ( segment , index ) => {
210229 return (
211230 < Pressable
0 commit comments