And there is a Glue API you can hook into to change the default value. Or you can also set it directly in _ViewInputs.
— Kyle Ye (@KyleSwifter) October 13, 2025
The normal result would be a HStack. But we can change it to be VStack and ZStack via some private API.
See gist code here to reproducehttps://t.co/hbs2hWmzwr pic.twitter.com/Y81iETezm6
Here's something that might surprise you: what looks like syntactic sugar in SwiftUI is actually creating fundamentally different view structures under the hood.
Two Ways to Write the Same Thing (Or Are They?)
Consider these two approaches to conditionally showing colors:
// Approach 1: ViewBuilder if-else
if show { Color.red } else { Color.blue }
// Approach 2: Ternary operator
Color(show ? .red : .blue)
You might think these are equivalent, but they're actually totally different things in the view of the DSL compute engine. The first creates a _ConditionalContent wrapper, while the second creates a single Color view.
The makeImplicitRoot Mechanism
When SwiftUI encounters certain view types like _ConditionalContent, IDView, or TupleView, it uses a special mechanism called makeImplicitRoot to build the view graph. This process relies on implicitRootBodyInputs, which defaults to _HStack in SwiftUI.
What's interesting is that there's actually a Glue API you can hook into to change this default value. Or you can set it directly in _ViewInputs if you're working with SwiftUI's private APIs.
Changing the Default Layout
Normally, when you use conditional content or tuple views without an explicit container, SwiftUI wraps them in an implicit HStack. But with some private API magic, we can change this to be a VStack or ZStack instead.
This explains some of the "mysterious" layout behavior you might have encountered when working with ViewBuilder syntax.
Try It Yourself
I've put together a gist demonstrating this behavior: https://gist.github.com/Kyle-Ye/7a61ac0d15b196c49b79b0a614670ca0
The code shows how to hook into the implicit root mechanism and override the default HStack behavior. It's a neat demonstration of how much is going on beneath SwiftUI's declarative surface.