前提・実現したいこと
こちらの記事(https://dev.classmethod.jp/articles/swiftui_overlay_sidemenu/)を参考にして右側から出てくるサイドメニューの実装を試みております。
発生している問題・エラーメッセージ
パラメータをいじって右側から出すことが出来たのですが、サイドメニュービューが停止する位置が左サイドになってしまいます(以下Gif参照)。
該当のソースコード
Swift
1// メインコンテンツビュー 2struct TestView: View { 3 var body: some View { 4 Text("Hello, World!") 5 } 6} 7 8// サイドメニュー出現前ビュー 9struct SideView: View { 10 @State var isOpenSideMenu: Bool = false 11 var body: some View { 12 VStack{ 13 ZStack{ 14 NavigationView { 15 TestView() 16 .navigationBarItems(trailing: ( 17 Button(action: { 18 self.isOpenSideMenu.toggle() 19 }) { 20 Image(systemName: "line.horizontal.3") 21 .imageScale(.large) 22 })) 23 } 24 25 .navigationBarTitle("") 26 .navigationBarHidden(true) 27 28 29 SideMenuView(isOpen: $isOpenSideMenu) 30 .edgesIgnoringSafeArea(.all) 31 } 32 } 33 } 34} 35 36// サイドメニュー表示後ビュー 37struct SideMenuView: View { 38 @Binding var isOpen: Bool 39 let width: CGFloat = screenWidth 40 41 var body: some View { 42 ZStack { 43 GeometryReader { geometry in 44 EmptyView() 45 } 46 .background(Color.gray.opacity(0.3)) 47 .opacity(self.isOpen ? 1.0 : 0.0) 48 .opacity(1.0) 49 .animation(.easeIn(duration: 0.25)) 50 .onTapGesture { 51 self.isOpen = false 52 } 53 54 HStack { 55 VStack() { 56 SideMenuContentView(topPadding: 100, isOpen: $isOpen) 57 Spacer() 58 } 59 .frame(width: width*2/3) 60 .background(Color(UIColor.systemGray6)) 61 .offset(x: self.isOpen ? 0 : self.width) 62 .animation(.easeIn(duration: 0.25)) 63 Spacer() 64 } 65 } 66 } 67} 68 69// サイドメニューの内容を作成したビュー 70struct SideMenuContentView: View { 71 let topPadding: CGFloat 72 @Binding var isOpen: Bool 73 @State var test: Bool = false 74 init(topPadding: CGFloat = 30,isOpen: Binding<Bool>) { 75 self.topPadding = topPadding 76 self._isOpen = isOpen 77 } 78 79 var body: some View { 80 VStack { 81 Text("Test1") 82 .padding(.vertical) 83 .foregroundColor(.gray) 84 .font(.headline) 85 86 Text("Test2") 87 .padding(.vertical) 88 .foregroundColor(.gray) 89 .font(.headline) 90 91 Text("Test3") 92 .padding(.vertical) 93 .foregroundColor(.gray) 94 .font(.headline) 95 96 Spacer() 97 98 } 99 .padding(.top, topPadding) 100 .padding(.leading, 32) 101 .onTapGesture { 102 self.isOpen = false 103 104 } 105 } 106} 107
試したこと
サイドメニューに関する知識自体が足りていないので、調整箇所が分からない状況です。
知見がある方ご教授頂きたいです。
補足情報(FW/ツールのバージョンなど)
Xcode 12.5.1
iOS 14.0向け
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。