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

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

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

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

Swift

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

解決済

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

KaoruYoshida
runrun

総合スコア34

Xcode

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

Swift

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

1回答

0リアクション

0クリップ

224閲覧

投稿2022/09/01 22:17

編集2022/09/01 22:18

前提

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

実現したいこと

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

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

遷移前の画面です。

イメージ説明

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

イメージ説明

該当のソースコード

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

LaunchScreen

import SwiftUI import FirebaseAuth struct LaunchScreen: View { enum Field: Hashable { case title case message } @State private var pushSignIn = false @State private var isShowingFirstSettingView: Bool = false @State private var isShowingContentView: Bool = false @State public var mail :String = "" @State public var password :String = "" @State public var errorMessage :String = "" @State public var stateLogin:Bool = false // ログイン状態 var body: some View { ZStack{ Image("BlueGreen") .resizable() .ignoresSafeArea() .frame(width: 450, height: 850) .onTapGesture { UIApplication.shared.closeKeyboard() } VStack(spacing: 80){ Image("SignIn") .frame(width: 200, height: 50) VStack(spacing: 42){ if(self.stateLogin){ ContentView() } else if(self.stateLogin){ FirstSettingView() } else { // 会員登録している場合 VStack(spacing: 15){ // メールアドレス ZStack(alignment: .center){ if mail.isEmpty{ Text("mail") .foregroundColor(.white) .frame(width:290, alignment: .leading) } TextField("",text: $mail) .foregroundColor(.white) .textFieldStyle(OvalTextFieldStyle()) .padding() .frame(width: 350, height: 60) .ignoresSafeArea(.keyboard, edges: .bottom) } // パスワード ZStack(alignment: .center){ if password.isEmpty{ Text("password") .foregroundColor(.white) .frame(width:290, alignment: .leading) } SecureField("",text:$password) .foregroundColor(.white) .textFieldStyle(OvalTextFieldStyle()) .padding() .frame(width: 350, height: 60) .ignoresSafeArea(.keyboard, edges: .bottom) } } // 認証 Button( action:{ if(self.mail == ""){ self.errorMessage = "mail adress has not been set" } else if(self.password == ""){ self.errorMessage = "password has not been set" } else { Auth.auth().signIn(withEmail: self.mail, password: self.password) { authResult, error in if authResult?.user != nil { //ログイン成功処理 print("success") self.stateLogin = true } else { // ログイン失敗処理 if let maybeError = error { let err = maybeError as NSError switch err.code { case AuthErrorCode.wrongPassword.rawValue: self.errorMessage = "wrong password" case AuthErrorCode.userNotFound.rawValue: self.errorMessage = "user not found... click↓" case AuthErrorCode.accountExistsWithDifferentCredential.rawValue: self.errorMessage = "account exists with different credential" case AuthErrorCode.invalidEmail.rawValue: self.errorMessage = "email adress format is incorrect" case AuthErrorCode.userDisabled.rawValue: self.errorMessage = "this user account has been disabled" default: self.errorMessage = "unknown error: \(err.localizedDescription)" } } } } } }, label:{ Text("→") .fontWeight(.bold) .font(.largeTitle) .frame(width: 70, height: 70) .foregroundColor(Color(red: 64/255, green: 168/255, blue: 166/255)) .background(Color(.white)) .cornerRadius(50) .shadow(radius: 5) }) .foregroundColor(Color.white) .frame(width: 100, height: 50) .onTapGesture { UIApplication.shared.closeKeyboard() } Text(errorMessage) .foregroundColor(Color(red: 162/255, green: 168/255, blue: 166/255)) HStack{ Text("If you do not have an account, click") .foregroundColor(Color(red: 162/255, green: 168/255, blue: 166/255)) /* 新規会員登録する場合 */ Button( action: { self.stateLogin.toggle() }, label: { Text("here") .foregroundColor(Color(red: 64/255, green: 168/255, blue: 166/255)) } ) }.frame(height: 70, alignment: .bottom) VStack{ Image("Instagram") .resizable() .frame(width: 60, height: 60) }.frame(height: 50, alignment: .bottom) } } }.frame(width: 360, height: 500, alignment: .top) } } } extension View { func underlineTextField() -> some View { self .padding(.vertical, 10) .overlay(Rectangle().frame(width: 300, height: 2).padding(.top, 35)) .foregroundColor(.pink) } } extension UIApplication { func closeKeyboard() { sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) } } struct OvalTextFieldStyle: TextFieldStyle { func _body(configuration: TextField<Self._Label>) -> some View { configuration .padding(10) .background(Color.white.opacity(0.2)) .cornerRadius(20) .shadow(color: .gray, radius: 10) } }

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

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

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Xcode

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

Swift

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