iOS: headerLargeTitle mirrors RTL (Arabic/Hebrew) title glyphs when direction is forced RTL
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 56/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- ios, objective-c, react-native
- Domain
- internationalization, mobile
Research direction
Start in RNSScreenStackHeaderConfig.mm at applySemanticContentAttributeIfNeededToNavCtrl:, focusing on the forced RTL semantic-content handling and the large-title container. Reproduce with an Arabic-language simulator using a native-stack screen with headerLargeTitle enabled, then verify that RTL bar buttons still lay out correctly while the large-title glyphs are no longer mirrored.
Written by the indexing model from the issue text.
Description
Description
On iOS, a native-stack screen with headerLargeTitle: true renders the large-title text horizontally mirrored (glyphs flipped) when the layout direction is RTL (I18nManager.isRTL === true). The regular (non-large) title in the same bar renders correctly, as do the bar buttons — only the large title is mirrored.
Root cause (traced)
RNSScreenStackHeaderConfig.mm → applySemanticContentAttributeIfNeededToNavCtrl: sets:
navCtrl.navigationBar.semanticContentAttribute = self.direction; // forceRightToLeft
[[UIView appearanceWhenContainedInInstancesOfClasses:@[navCtrl.navigationBar.class]]
setSemanticContentAttribute:self.direction];
Forcing forceRightToLeft on the navigation bar makes UIKit apply a horizontal-flip transform to the large-title container, mirroring the title glyphs. The regular title is centered/handled differently and is unaffected. The block only runs when direction is explicitly forced (navCtrl.view.semanticContentAttribute != self.direction).
Reproduction
I18nManager.forceRTL(true)(or run on an Arabic/Hebrew device).- A native-stack screen with
headerLargeTitle: trueand an RTL-script title (e.g. Arabic «الإشعارات»). - The large title renders mirrored.
headerLargeTitle: falserenders it correctly.
Confirmed on an Arabic-language simulator (not just forced-RTL-on-LTR), so it affects real RTL-locale devices.
Environment
react-native-screens 4.25.2, RN 0.85, iOS, New Architecture, expo-router 56.
Workaround
Use standard (non-large) titles under RTL. Filing so large titles can be re-enabled once the large-title container's mirror is corrected (e.g. resetting the large-title label's semanticContentAttribute while keeping the bar buttons' RTL layout).
- Dominant language
- TypeScript
- Stars
- 3.7k
- Forks
- 714
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 71
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from software-mansion/react-native-screens
-
missing-repro platform:ios
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
software-mansion/react-native-screens#4168 · 10 comments · 2 reactions ·
-
area:stack-v4 platform:android
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
software-mansion/react-native-screens#3784 · 5 comments ·
-
cr:missing-info cr:missing-repro cr:platform:android missing-info missing-repro platform:android
Difficulty 4/5 3-5 days Newbie friendliness 42/100
software-mansion/react-native-screens#4677 · 4 comments ·
-
cr:missing-repro cr:platform:ios missing-repro platform:ios
software-mansion/react-native-screens#4671 · 3 comments · 1 assignee ·
-
cr:missing-info cr:missing-repro cr:platform:android missing-info missing-repro platform:android
software-mansion/react-native-screens#4664 · 3 comments · 1 assignee ·
All issues in software-mansion/react-native-screens
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
-
code-quality refactoring
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
vercel/react-tweet#225 ·