質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

561閲覧

【SwiftUI】画面遷移のフォーマットがおかしい

KaoruYoshida

総合スコア36

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/09/01 22:17

編集2022/09/02 11:42

前提

ログイン画面からContentViewへの遷移をさせる機能を作っています。
ログイン画面から画面遷移をすると画面の一部だけが遷移するというおかしな状況になりました。

実現したいこと

  • 全画面で画面遷移したい

発生している問題・エラーメッセージ

遷移前の画面です。

イメージ説明

ボタンを押すと以下のように遷移してしまい、その枠内では操作できる状況になります。

イメージ説明

該当のソースコード

ログイン画面のソースコードです。

LaunchScreen

1import SwiftUI 2import FirebaseAuth 3 4struct LaunchScreen: View { 5 6 enum Field: Hashable { 7 case title 8 case message 9 } 10 @State private var pushSignIn = false 11 @State private var isShowingFirstSettingView: Bool = false 12 @State private var isShowingContentView: Bool = false 13 14 @State public var mail :String = "" 15 @State public var password :String = "" 16 @State public var errorMessage :String = "" 17 18 @State public var stateLogin:Bool = false // ログイン状態 19 20 var body: some View { 21 ZStack{ 22 Image("BlueGreen") 23 .resizable() 24 .ignoresSafeArea() 25 .frame(width: 450, height: 850) 26 .onTapGesture { 27 UIApplication.shared.closeKeyboard() 28 } 29 VStack(spacing: 80){ 30 Image("SignIn") 31 .frame(width: 200, height: 50) 32 33 VStack(spacing: 42){ 34 if(self.stateLogin){ 35 ContentView() 36 } else if(self.stateLogin){ 37 FirstSettingView() 38 } else { 39 // 会員登録している場合 40 VStack(spacing: 15){ 41 // メールアドレス 42 ZStack(alignment: .center){ 43 if mail.isEmpty{ 44 Text("mail") 45 .foregroundColor(.white) 46 .frame(width:290, alignment: .leading) 47 } 48 TextField("",text: $mail) 49 .foregroundColor(.white) 50 .textFieldStyle(OvalTextFieldStyle()) 51 .padding() 52 .frame(width: 350, height: 60) 53 .ignoresSafeArea(.keyboard, edges: .bottom) 54 } 55 // パスワード 56 ZStack(alignment: .center){ 57 if password.isEmpty{ 58 Text("password") 59 .foregroundColor(.white) 60 .frame(width:290, alignment: .leading) 61 } 62 SecureField("",text:$password) 63 .foregroundColor(.white) 64 .textFieldStyle(OvalTextFieldStyle()) 65 .padding() 66 .frame(width: 350, height: 60) 67 .ignoresSafeArea(.keyboard, edges: .bottom) 68 } 69 } 70 // 認証 71 Button( 72 action:{ 73 if(self.mail == ""){ 74 self.errorMessage = "mail adress has not been set" 75 } else if(self.password == ""){ 76 self.errorMessage = "password has not been set" 77 } else { 78 Auth.auth().signIn(withEmail: self.mail, password: self.password) { authResult, error in 79 if authResult?.user != nil { 80 //ログイン成功処理 81 print("success") 82 self.stateLogin = true 83 } else { 84 // ログイン失敗処理 85 if let maybeError = error { 86 let err = maybeError as NSError 87 switch err.code { 88 case AuthErrorCode.wrongPassword.rawValue: 89 self.errorMessage = "wrong password" 90 case AuthErrorCode.userNotFound.rawValue: 91 self.errorMessage = "user not found... click↓" 92 case AuthErrorCode.accountExistsWithDifferentCredential.rawValue: 93 self.errorMessage = "account exists with different credential" 94 case AuthErrorCode.invalidEmail.rawValue: 95 self.errorMessage = "email adress format is incorrect" 96 case AuthErrorCode.userDisabled.rawValue: 97 self.errorMessage = "this user account has been disabled" 98 default: 99 self.errorMessage = "unknown error: \(err.localizedDescription)" 100 } 101 } 102 } 103 } 104 } 105 106 }, label:{ 107 Text("→") 108 .fontWeight(.bold) 109 .font(.largeTitle) 110 .frame(width: 70, height: 70) 111 .foregroundColor(Color(red: 64/255, green: 168/255, blue: 166/255)) 112 .background(Color(.white)) 113 .cornerRadius(50) 114 .shadow(radius: 5) 115 }) 116 .foregroundColor(Color.white) 117 .frame(width: 100, height: 50) 118 .onTapGesture { 119 UIApplication.shared.closeKeyboard() 120 } 121 Text(errorMessage) 122 .foregroundColor(Color(red: 162/255, green: 168/255, blue: 166/255)) 123 HStack{ 124 Text("If you do not have an account, click") 125 .foregroundColor(Color(red: 162/255, green: 168/255, blue: 166/255)) 126 /* 新規会員登録する場合 */ 127 Button( 128 action: { 129 self.stateLogin.toggle() 130 131 }, 132 label: { 133 Text("here") 134 .foregroundColor(Color(red: 64/255, green: 168/255, blue: 166/255)) 135 } 136 ) 137 }.frame(height: 70, alignment: .bottom) 138 VStack{ 139 Image("Instagram") 140 .resizable() 141 .frame(width: 60, height: 60) 142 }.frame(height: 50, alignment: .bottom) 143 } 144 } 145 }.frame(width: 360, height: 500, alignment: .top) 146 } 147 148 } 149} 150 151 152extension View { 153 func underlineTextField() -> some View { 154 self 155 .padding(.vertical, 10) 156 .overlay(Rectangle().frame(width: 300, height: 2).padding(.top, 35)) 157 .foregroundColor(.pink) 158 } 159} 160 161extension UIApplication { 162 func closeKeyboard() { 163 sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) 164 } 165} 166 167struct OvalTextFieldStyle: TextFieldStyle { 168 func _body(configuration: TextField<Self._Label>) -> some View { 169 configuration 170 .padding(10) 171 .background(Color.white.opacity(0.2)) 172 .cornerRadius(20) 173 .shadow(color: .gray, radius: 10) 174 } 175}

原因がよくわからず困っています。
ご回答よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

macOS バージョン12.3.1
2.6 GHz 6コアIntel Core i7
Xcodeバージョン13.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ビューの切り替えが内側にあるからかなと思いました。

swift

1if(self.stateLogin){ 2 ContentView() 3} else if(self.stateLogin){ 4 FirstSettingView() 5} else {

一番外側のZStackを包み込むように切り替えをしてみたらいかがでしょうか。
*else ifのところでもstateLoginを使っているのはちょっとわからなかったです

swift

1if (self.stateLogin) { 2 ContentView() 3} else { 4 ZStack{ 5 Image("BlueGreen")

投稿2022/09/02 00:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KaoruYoshida

2022/09/02 02:42

解決できました!! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問