🐙

【SwiftUI】if文を使ってOSによってViewを変更する方法

2020/09/24に公開

SwiftUIでOSによってViewを変更する方法です。
macOSのアプリって難しそうと感じている人やiOSはもちろんmacOSにも対応したアプリを作りたい人はこれでmacOSのBuildも簡単に体験できますので是非触ってみて下さい!

-iPadによる表示

-macによる表示

-Code

var body: some View {
        NavigationView{
        #if os(iOS)
        content
            .navigationTitle("hogehoge大学")
        #else
        content
            .frame(minWidth: 200, idealWidth: 250, maxWidth: 300)
        #endif
           HogehogeView()
        }
    }

contentView

var content: some View {
            List {
                NavigationLink(destination: HogehogeView()){
                Label("コース選択", systemImage: "book.closed")
                }
                Label("カリキュラム日程", systemImage: "list.bullet.rectangle")
                Label("動画学習", systemImage: "tv")
                Label("課題一覧", systemImage: "mail.stack")
                Label("ゼミ検索", systemImage: "magnifyingglass")
            }
            .listStyle(SidebarListStyle())
    }

-解説
if文を使ってOSの違いを判別し、それぞれにViewを変更しています。
#if os(iOS)ではそのままcontentの通り表示させ、タイトルを”hogehoge大学”としていますがもしOSが違った場合はcontent(ここではサイドバーのフレームの大きさを定義しています).frame(minWidth: 200, idealWidth: 250, maxWidth: 300)でViewを変更させています。
つまり実装に必要なcodeは
#if os(iOS)
#else
#endif
のみで実装できます!これなら簡単にmacOSverも作りやすそうなので今後挑戦していこうかと思います!

-補足
今回はif文をOSによる変更を実装しましたが、Viewごと変更したい場合はstruct直下に@ViewBuilderが必要ですのでご注意を!

Discussion