iOS Development

A Newbie’s Information to NavigationSplitView in SwiftUI for iOS 16

A Newbie’s Information to NavigationSplitView in SwiftUI for iOS 16
Written by admin


In iOS 16, apart from introducing the brand new NavigationStack, Apple additionally launched a brand new view container named NavigationSplitView for builders to create two or three column navigation interface. If you wish to construct UI just like the inventory Mail app, you must take a look at this cut up view part.

Whereas NavigationSplitView is extra appropriate for iPadOS and macOS apps, you may as well apply it to apps for iPhone. The view part mechanically adapts itself for iPhone. As a substitute of displaying a multi-column interface, it creates a single-column expertise.

The brand new NavigationSplitView comes with varied choices so that you can customise its look and operations. You may change the column width and programmatically present/conceal the columns.

On this tutorial, we are going to create a three-column navigation UI utilizing NavigationSplitView.

Let’s get began.

The Primary Utilization of NavigationSplitView

The NavigationSplitView helps each two-column and three-column navigation expertise. Their implementations are fairly comparable. To create a two-column navigation UI, you write the code like this:

For 3-column navigation interface, you add the content material parameter in between:

We are going to begin with the two-column navigation UI and finally construct the three-column design.

Constructing the 2-Column Navigation Interface

If you happen to’ve learn my earlier tutorial on the expandable record view, you might know that I’m an enormous fan of La Marzocco. In that tutorial, I confirmed you learn how to create an expandable record view with inset group fashion.

Now let’s flip this expandable record right into a two stage navigation interface just like the screenshot proven under:

swiftui-navigationsplitview-two-column

Earlier than we create the cut up view, let’s start with the info mannequin. We create a struct to mannequin a menu merchandise:

To make a nested record, the important thing right here is to incorporate a property that comprises an optionally available array of kids (i.e. subMenuItems). Be aware that the youngsters are of the identical sort of its father or mother.

For the highest stage menu gadgets, we will create an array of MenuItem like this:

For every of the menu merchandise, we specify the array of the sub-menu gadgets. In case if there is no such thing as a sub-menu merchandise, you possibly can omit the subMenuItems parameter or go it a nil worth. For the sub-menu gadgets, we will outline them like this:

To raised set up the info mannequin, we create a struct known as CoffeeEquipmentModel like this:

The mainMenuItems array holds the pattern menu gadgets. Each subMenuItems and menuItem are helper strategies for trying up a particular class or menu merchandise.

Now that we’ve ready the info mannequin, let’s transfer onto the implementation of the navigation cut up view. Create a brand new file named TwoColumnSplitView.swift utilizing the SwiftUI view template. Replace the TwoColumnSplitView struct like this:

The primary closure of NavigationSplitView presents the principle menu merchandise. We use a Checklist view to loop by all mainMenuItems within the information mannequin and show every of the menu gadgets utilizing a HStack view.

We even have a state variable named selectedCategoryId, which is used to carry the chosen foremost menu merchandise.

For the element closure, that is the place the submenu merchandise is rendered. If a class is chosen, we name the subMenuItems technique to get the submenu gadgets for that individual class. We then show the submenu gadgets utilizing Checklist view. Conversely, if no class is chosen, we show a textual content message instructing the consumer to decide on a class.

When you made the modifications, you must see a two-column navigation UI within the Xcode preview.

swiftui-split-view-three-columns

Making a Three-Column Navigation Interface

Now that we’ve created a two-column navigation interface, let’s additional improve it to supply customers with a three-column navigation expertise. The additional column is used for displaying the picture of the chosen tools.

swiftui-navigation-split-view-three-column-demo

To transform the two-column navigation interface to three-column, we have to implement a further parameter (i.e. content material) for the NavigationSplitView. Let’s create a brand new view named ThreeColumnSplitView like this:

Mainly, the code within the content material closure ought to be similar to you. The content material parameter is designed for displaying the submenu gadgets. Thus, we use the Checklist view to point out the submenu gadgets for the chosen class.

When an merchandise is chosen within the submenu, the app reveals the tools picture. That is achieved by the code written within the element closure.

After the code modifications, the preview pane ought to present you a two-column structure.

swiftui-navigation-empty

By default, the primary column is hidden. You could faucet the menu button on the top-left nook to disclose it.

To manage the visibility of the cut up view, you possibly can declare a state variable of the sort NavigationSplitViewVisibility and set its worth to .all:

When instantiating the NavigationSplitView, it has an choice parameter named columnVisibility. You may merely go the binding of columnVisibility to manage the visibility of the columns.

swiftui-column-visiblity-split-view

The NavigationSplitViewVisibility.all worth tells iPadOS to show all of the three columns. There are different choices together with:

  • .automated – Use the default main column visibility for the present system. That is the default setting.
  • .doubleColumn – Present the content material column and element space of a three-column navigation cut up view.
  • .detailOnly – Cover the main two columns of a three-column cut up view. In different phrases, solely the element space reveals.

Customizing the Model of Navigation Break up Views

Have you ever examined the app in iPad Portrait? By default, the element space takes up the entire display when the iPad system is in portrait mode. So, while you convey up the principle menu and submenu areas, the element space is hidden behind these two main columns.

swiftui-portrait-multiple-column

If you happen to don’t like this fashion, you possibly can change it by attaching the .navigationSplitViewStyle modifier to NavigationSplitView:

The default worth is ready to .automated. If you happen to set the worth to .balanced, it reduces the element space such that the 2 main columns can seem on the similar time.

swiftui-splitview-multi-column-balanced

What’s Subsequent

This tutorial offers you an introduction to NavigationSplitView in iOS 16. It’s very simple to create multi-column navigation expertise for iPad customers. Even when you develop apps for iPhone customers, NavigationSplitView can adapt itself to suit the navigation expertise on narrower screens. For instance, when iPhone 13 Professional Max is in portrait mode, the cut up view reveals a one-column navigation. If you happen to rotate the system sideway, the cut up view modifications to a multi-column structure.

Due to this fact, take a while to review this cut up view part and apply it to your app each time this type of UI is sensible.

For reference, if you wish to be taught extra about NavigationSplitView, you possibly can take a look at this WWDC video.

If you happen to take pleasure in this text and need to dive deeper into SwiftUI, you might take a look at our Mastering SwiftUI ebook.



About the author

admin

Leave a Comment