Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 16 additions & 18 deletions ios/RNSScreenStackHeaderConfig.mm
Original file line number Diff line number Diff line change
Expand Up @@ -678,20 +678,19 @@ - (void)configureBackItem:(nullable UINavigationItem *)prevItem API_UNAVAILABLE(

const auto isBackTitleBlank = [NSString rnscreens_isBlankOrNull:config.backTitle] == YES;
NSString *resolvedBackTitle = isBackTitleBlank ? prevItem.title : config.backTitle;
RNSUIBarButtonItem *backBarButtonItem = [[RNSUIBarButtonItem alloc] initWithTitle:resolvedBackTitle
style:UIBarButtonItemStylePlain
target:nil
action:nil];
[backBarButtonItem setMenuHidden:config.disableBackButtonMenu];

auto shouldUseCustomBackBarButtonItem = config.disableBackButtonMenu;

prevItem.backButtonTitle = resolvedBackTitle;
// This has any effect only in case the `backBarButtonItem` is not set.
// We apply it before we configure the back item, because it might get overriden.
prevItem.backButtonDisplayMode = config.backButtonDisplayMode;
prevItem.backButtonTitle = resolvedBackTitle;

if (config.isBackTitleVisible) {
RNSUIBarButtonItem *backBarButtonItem = [[RNSUIBarButtonItem alloc] initWithTitle:resolvedBackTitle
style:UIBarButtonItemStylePlain
target:nil
action:nil];
auto shouldUseCustomBackBarButtonItem = config.disableBackButtonMenu;
[backBarButtonItem setMenuHidden:config.disableBackButtonMenu];

if ((config.backTitleFontFamily &&
// While being used by react-navigation, the `backTitleFontFamily` will
// be set to "System" by default - which is the system default font.
Expand All @@ -715,19 +714,18 @@ - (void)configureBackItem:(nullable UINavigationItem *)prevItem API_UNAVAILABLE(
}
[RNSScreenStackHeaderConfig setTitleAttibutes:attrs forButton:backBarButtonItem];
}

// Prevent unnecessary assignment of backBarButtonItem if it is not customized,
// as assigning one will override the native behavior of automatically shortening
// the title to "Back" or hide the back title if there's not enough space.
// See: https://github.com/software-mansion/react-native-screens/issues/1589
if (shouldUseCustomBackBarButtonItem) {
prevItem.backBarButtonItem = backBarButtonItem;
}
} else {
// back button title should be not visible next to back button,
// but it should still appear in back menu
prevItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
shouldUseCustomBackBarButtonItem = NO;
}

// Prevent unnecessary assignment of backBarButtonItem if it is not customized,
// as assigning one will override the native behavior of automatically shortening
// the title to "Back" or hide the back title if there's not enough space.
// See: https://github.com/software-mansion/react-native-screens/issues/1589
if (shouldUseCustomBackBarButtonItem) {
prevItem.backBarButtonItem = backBarButtonItem;
}
#endif
}
Expand Down
Loading