From ebc4865c5bc3da332f2f4568dde0ab67a7617058 Mon Sep 17 00:00:00 2001 From: "satyajit.happy" Date: Fri, 7 Jun 2019 11:17:20 +0200 Subject: [PATCH] fix: make sure left button isn't bigger than screen width / 2 --- .../src/views/Header/HeaderBackButton.tsx | 65 +++++++++++-------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/packages/stack/src/views/Header/HeaderBackButton.tsx b/packages/stack/src/views/Header/HeaderBackButton.tsx index ed6390c9..aecc9ab2 100644 --- a/packages/stack/src/views/Header/HeaderBackButton.tsx +++ b/packages/stack/src/views/Header/HeaderBackButton.tsx @@ -50,7 +50,20 @@ class HeaderBackButton extends React.Component { }); }; - private renderBackImage() { + private shouldTruncateLabel = () => { + const { titleLayout, screenLayout, label } = this.props; + const { initialLabelWidth } = this.state; + + return ( + !label || + (initialLabelWidth && + titleLayout && + screenLayout && + (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26) + ); + }; + + private renderBackImage = () => { const { backImage, labelVisible, tintColor } = this.props; if (backImage) { @@ -68,29 +81,12 @@ class HeaderBackButton extends React.Component { /> ); } - } - - private getLabelText = () => { - const { titleLayout, screenLayout, label, truncatedLabel } = this.props; - - let { initialLabelWidth } = this.state; - - if (!label) { - return truncatedLabel; - } else if ( - initialLabelWidth && - titleLayout && - screenLayout && - (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26 - ) { - return truncatedLabel; - } else { - return label; - } }; private renderLabel() { const { + label, + truncatedLabel, allowFontScaling, labelVisible, backImage, @@ -99,33 +95,32 @@ class HeaderBackButton extends React.Component { screenLayout, } = this.props; - let leftLabelText = this.getLabelText(); + const leftLabelText = this.shouldTruncateLabel() ? truncatedLabel : label; if (!labelVisible || leftLabelText === undefined) { return null; } - const label = ( + const labelElement = ( - {this.getLabelText()} + {leftLabelText} ); - if (backImage) { + if (backImage || Platform.OS !== 'ios') { // When a custom backimage is specified, we can't mask the label // Otherwise there might be weird effect due to our mask not being the same as the image - return label; + return labelElement; } return ( @@ -140,7 +135,17 @@ class HeaderBackButton extends React.Component { } > - {label} + + {labelElement} + ); } @@ -202,6 +207,12 @@ const styles = StyleSheet.create({ // Adjusting the letterSpacing makes them coincide better letterSpacing: 0.35, }, + labelWrapper: { + // These styles will make sure that the label doesn't fill the available space + // Otherwise it messes with the measurement of the label + flexDirection: 'row', + alignItems: 'flex-start', + }, icon: Platform.select({ ios: { height: 21,