• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

Sheet가 바로 닫히는 문제와 홈 화면 액션 관련 문의

23.10.19 23:11 작성 23.10.19 23:32 수정 조회수 171

0

안녕하세요, SwiftUI 강의를 듣고 몇가지 응용해서 연습을 하고 있습니다

아래 코드 상에서 sheet를 보이게 설정하자 마자 TestChildView와 sheet화면이 닫히는 문제가 발생하고 있어요
(처음 실행시키면 문제가 없는데 몇번 뒤로 왔다갔다 하면 문제가 계속 재현됩니다 🥲
최소 개발환경은 iOS 15.0, target device 17.0으로 했습니다)

혹시 제가 놓친게 있을까요?

 

추가로 TestView화면으로 넘어간 상태에서 아이폰 홈화면으로 아래서 위로 쓸어올리는 액션을 하면, 탭 화면으로 뒤로 가지는데 혹시 그부분도 어떻게 방어할수 있는지 궁금합니다!

 

답변 주시면 감사하겠습니다 🙏


아래와 같이 NavigationView안에 TabView를 정의했습니다

(이렇게 한이유는 TestView에서 다른 화면으로 넘어갈때 하단 탭바가 안보이면 좋겠어서 NavigationView를 바깥으로 뺐습니다)

 

TestView에서 TestChildView화면으로 넘어가고, "Open Sheet' 버튼을 클릭하여 sheet를 화면에 띄워보고자 합니다.

 

import SwiftUI

struct TestHomeView: View {
    var body: some View {
        NavigationView {
            TabView {
                TestView()
                    .tabItem {
                        Image(systemName: "house.fill")
                        Text("Tab 1 View")
                    }
                    .tabViewStyle(DefaultTabViewStyle())

                Text("View 2")
                    .tabItem {
                        Image(systemName: "chart.line.uptrend.xyaxis")
                        Text("Tab 2 View")
                    }
                Text("View 3")
                    .tabItem {
                        Image(systemName: "bell")
                        Text("Tab 3 View")
                    }
            }
        }.navigationViewStyle(.stack)
    }
}

struct TestView: View {
    var body: some View {
        VStack {
            Text("Tab 1 View")
            NavigationLink {
                TestChildView()
            } label: {
                Text("Test view")
            }
        }
    }
}

struct TestChildView: View {
    @State private var isShow = false
    
    var body: some View {
        Text("Tab1 Child View")
        Button {
            isShow = true
        } label: {
            Text("Open Sheet").font(.largeTitle)
        }.sheet(isPresented: $isShow, content: {
            Text("test")
        })
    }
}

답변 1

답변을 작성해보세요.

0

안녕하세요 Mrjjong95 님.

보내주신 코드를 제가 테스트해보니 sheet 화면이 자동으로 닫히는 현상이 나타 나는것을 확인했습니다. 코드 상에서 TestView 에서 NavigationLink 를 사용하셨는데요 NavigationView 안에서 사용을 기본적으로 하셔야 됩니다. 그래서 NavigationView 을 적용해서 테스트해보니 sheet 이 자동으로 닫히지 않고 정상적으로 작동하는것을 확인했습니다.

 

struct TestView: View {
	var body: some View {
		NavigationView {
			VStack {
				Text("Tab 1 View")
				NavigationLink {
					TestChildView()
				} label: {
					Text("Test view")
				}
			}
		}
	}
}

 

추가로 TestView화면으로 넘어간 상태에서 아이폰 홈화면으로 아래서 위로 쓸어올리는 액션을 하면, 탭 화면으로 뒤로 가지는데 혹시 그부분도 어떻게 방어할수 있는지 궁금합니다!

 

이 부분에 대해서는 어떤 의미 인지 잘 모르겠어서요. 혹시, 아이폰에서 다른 앱으로 전환 하는 할때 사용하는 아래에서 위로 올리는 액션을 말씀하시는 건가요?

 

감사합니다

 

Mrjjong95님의 프로필

Mrjjong95

질문자

2023.10.20

넵 다른앱으로 전환할때 사용하는 아래서 위로 올리는 액션입니다,

요부분도 안에 NavigationView를 넣으니 해결이되었습니다 감사합니다!

 

TestView안에 NavigationView를 정의해서 TabView에서 TestView를 띄울때

TabView하단 tab Item을 숨기는건 별도로 커스텀하게 구현해야되는걸까요?

 

네 Tabview 하단에 숨기는거는 별도로 커스텀해서 구현해야 되는데 제가 검색해보니 iOS 16 부터는 SwiftUI 에서 지원 하는거 같습니다.

.toolbar(.hidde, for .tabBar) // iOS 16 이후

이전버전은 UIKit 에서 가져와서 사용해야될거 같습니다 자세한 내용은 아래 링크 확인하시면 될꺼 같습니다

감사합니다

 

https://stackoverflow.com/questions/58444689/swiftui-hide-tabbar-in-subview

 

Mrjjong95님의 프로필

Mrjjong95

질문자

2023.10.23

넵 답변감사합니다!!