<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thoughtbot="https://thoughtbot.com/feeds/">
  <title>Giant Robots Smashing Into Other Giant Robots</title>
  <subtitle>Written by thoughtbot, your expert partner for design and development.
</subtitle>
  <id>https://robots.thoughtbot.com/</id>
  <link href="https://thoughtbot.com/blog"/>
  <link href="https://feed.thoughtbot.com" rel="self"/>
  <updated>2026-07-13T00:00:00+00:00</updated>
  <author>
    <name>thoughtbot</name>
  </author>
<entry>
  <title>Migrating to native stack navigation, with a surprise from iOS 26</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/migrating-to-native-stack-navigation-with-a-surprise-from-ios-26"/>
  <author>
    <name>Jose Blanco</name>
  </author>
  <id>https://thoughtbot.com/blog/migrating-to-native-stack-navigation-with-a-surprise-from-ios-26</id>
  <published>2026-07-13T00:00:00+00:00</published>
  <updated>2026-07-10T08:27:10Z</updated>
  <content type="html">&lt;p&gt;I have been working on an app that still sits on React Native 0.77 and the 
old architecture. Slowly, as I was getting a grip on the new architecture,
one of the first big refactors was related to the navigation.&lt;/p&gt;

&lt;p&gt;We were using JavaScript stack navigators, so the plan was to move everything
over to native stack navigators. We migrated all of our JavaScript stack
navigators across to the native stack. Then I opened the app on a device running
the new iOS version and got a little surprise.&lt;/p&gt;
&lt;h2 id="liquid-glass"&gt;
  
    Liquid Glass
  
&lt;/h2&gt;

&lt;p&gt;Because the native stack uses the real iOS navigation components under the hood,
the app suddenly picked up the new Liquid Glass styling from iOS 26. The app is
not ready for it. Nothing had been designed with that look in mind, and it
clashed with everything we had, especially the top left arrow back icon and the
logo in the middle.&lt;/p&gt;

&lt;p&gt;The quick way to opt out is a single key in &lt;code&gt;Info.plist&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;UIDesignRequiresCompatibility&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;true/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That tells iOS to keep rendering the app in the older compatibility style until
we are ready to embrace the new design properly.&lt;/p&gt;
&lt;h2 id="and-another-surprise"&gt;
  
    And another surprise
  
&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://images.thoughtbot.com/nj5cv5djeh2q1w2roc0vpqr4idlg_header_blue_clipped.png" alt="A not so rounded logo"&gt;&lt;/p&gt;

&lt;p&gt;With Liquid Glass disabled, I thought I was done. Instead, our logo in the
navigation bar now looked clipped. The top and bottom were being cut off, and
it looked broken.&lt;/p&gt;

&lt;p&gt;I spent a long time going in rounds on this one. I used Claude for ideas and,
being honest, the suggestions were not useful at all this time. Every answer
pushed me back towards a JavaScript based navigator, which was exactly the 
thing I had just spent time moving away from. After a lot of back and forth I
was no closer.&lt;/p&gt;
&lt;h2 id="sometimes-a-good-old-google-search-is-enough"&gt;
  
    Sometimes a good old Google search is enough
  
&lt;/h2&gt;

&lt;p&gt;In the end, I found the answer in someone else’s blog post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The iOS navigation bar is exactly 44pt tall&lt;/strong&gt;. Our logo in the header was 55pt.
Even with Liquid Glass disabled, the underlying iOS component is fixed at 44pt
and there is nothing we can do to change that. Anything taller than the bar
simply gets clipped.&lt;/p&gt;

&lt;p&gt;I was quite confused about why we never had this issue? Before the migration,
our header was a custom JavaScript header, and on older iOS versions a title view
that was bigger than the bar just spilled over the edges and looked fine.
The platform tolerated it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We were never really allowed to use a 55pt logo&lt;/strong&gt;. The old setup just happened
to put up with it. iOS 26, going through the real native bar, stopped being so
forgiving and clipped the logo the way it was probably always meant to.&lt;/p&gt;
&lt;h2 id="how-to-fix-it"&gt;
  
    How to fix it
  
&lt;/h2&gt;

&lt;p&gt;The fix in the end was straightforward. We render a smaller logo for devices on
iOS 26 or higher and keep the normal logo for everything else, including older
iOS versions and Android. It is not glamorous, but it respects what the platform
actually allows rather than fighting it.&lt;/p&gt;

&lt;p&gt;If you move from React Navigation’s JS stack navigator to native stack navigator
and your header looks off on newer iOS, check the height of whatever you are
putting in the bar. 44pt is the limit.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/designing-menu-icons-for-android-devices"&gt;Designing Menu Icons for Android Devices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/towards-a-retina-web-follow-up"&gt;Towards a Retina Web: Follow-up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/designing-for-ios-taming-uibutton"&gt;Designing for iOS: Taming UIButton&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>We moved our React Native app from the JavaScript stack to the native stack and suddenly inherited Liquid Glass, and a clipped logo.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
</feed>
