inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[Lv.1] iOS 17 앱 개발 기초 - SwiftUI로 시작하기

NavigationView

페이지 이동에 관해 질문이 있습니다 !

339

oilater

작성한 질문수 11

0

안녕하세요 강의 너무 잘 듣고 있습니다 ! 예전에 앱 만들다가 궁금했던 것이 두가지 정도 있어 여쭤보려고 합니다. 

  1. 페이지 페이지 가 연결되는 느낌이 아니라 아예 다른 페이지로 넘어가고 싶은데,
Tab, NavigationLink 말고 다른 방법이 있을까요? 보통 이럴 때는 그냥 NavigationLink 로 이동시키고 hidden을 false를 주는건가요? 
  1. 그리고 페이지 내 컴포넌트 안에 있는 컴포넌트에서 버튼을 눌렀을 때 Sheet이 올라오게 하고 싶은데
그럴 때 Sheet의 전체 크기가 전체 화면 기준이 아니라 그 컴포넌트가 기준이 되어 작게 나타났을 때가 있었습니다.이런 경우에는 어떻게 해결하나요? 답변해주시면 감사하겠습니다.

ios swift swiftui

답변 2

0

Jacob(제이콥)

안녕하세요 oilater 님.

확인이 늦어 이제 답변드리네요 죄송합니다.

페이지 연결 느낌이 아니라 다른 페이지로 넘기는것은 .fullScreenCover 와 .presentationDetents 을 활용해서 sheet 의 크기와 페이지 전환을 NavigationLink 를 사용하지 않고도 구현 할 수 있습니다.

자세한 사항은 링크를 참조해주세요

https://sarunw.com/posts/swiftui-bottom-sheet/

감사합니다

예제 코드는 다음과 같습니다.

import SwiftUI


struct test1: View {
    @State private var showFullScreen = false

    var body: some View {
        VStack {
            Text("Home Page")
                .font(.largeTitle)
                .padding()

            Button(action: {
                showFullScreen.toggle()
            }) {
                Text("Go to Next Page")
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(8)
            }
//            .fullScreenCover(isPresented: $showFullScreen) {
//                NextPageView() // FullScreenColor 와 같이 Sheet}
            .sheet(isPresented: $showFullScreen, content: {
                NextPageView()
//                    .presentationDetents([.medium]) // 중간 사이즈 sheet
//                    .presentationDetents([.fraction(0.7)])
                // 스크린 사이즈의 70% 만
                    .presentationDetents([.fraction(0.3)]) // 스크린 사이즈의 30% 만
            })
            
        }
    }
}

struct NextPageView: View {
    @Environment(\.presentationMode) var presentationMode

    var body: some View {
        VStack {
            Text("Next Page")
                .font(.largeTitle)
                .padding()

            Button(action: {
                presentationMode.wrappedValue.dismiss()
            }) {
                Text("Go Back")
                    .padding()
                    .background(Color.red)
                    .foregroundColor(.white)
                    .cornerRadius(8)
            }
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color.green)
        .edgesIgnoringSafeArea(.all)
    }
}


#Preview {
    test1()
}

 

image

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

oilater님의 SwiftUI와 iOS 17 관련 질문에 대해 답변드리겠습니다.

  1. 탭이나 NavigationLink 외에도 페이지 전환을 위한 다른 방법이 있습니다. SwiftUI에서는 Modal 방식이나, 화면 전환을 위한 사용자 정의 애니메이션과 뷰 전환을 사용할 수도 있습니다. NavigationLink 와 hidden을 조합하는 방법도 있지만, PresentationLink 또는 전환 애니메이션을 커스터마이징하여 새로운 화면을 표시하는 방법도 고려할 수 있습니다.

  2. Sheet가 표시되는 문제로, 컴포넌트 내에서 Sheet를 전체 화면으로 표시하고 싶은 경우, Sheet의 presentationDetents 속성을 사용하여 크기를 조절할 수 있습니다. 또한, .sheet 모디파이어를 사용할 때, 호출되는 뷰의 레벨에 주의해야 합니다. 전체 화면 기준으로 Sheet를 표시하려면, Sheet 모디파이어를 최상위 뷰나 NavigationView에 적용해야 전체 화면으로 나타날 수 있습니다.

두 사항 모두, SwiftUI 라이브러리 및 iOS 버전에 따라 사용 가능한 기능과 구현 방법에 차이가 있을 수 있으니, SwiftUI 및 iOS 개발 문서를 참고하시는 것도 좋습니다. 추가 질문이 있으시면 언제든지 문의해주시기 바랍니다.

소리가 ㅠㅠ

0

53

2

index와 indexSet

0

59

2

NavigationBarItems Deprecated

0

96

3

Xcode version 문제

0

195

2

GalleryView 작성시, @State? @Bidnable? 의 차이점이 뭔지 궁금합니다.

0

303

2

scrollTransition 에서 phase 값을 찍어보고 싶습니다.

0

277

2

갤러리에서 슬라이더 변경시 gridSwitch 가 두번 실행됩니다.

0

307

2

유튜브 영상 플레이시 워닝 이슈 문의

0

518

1

ListBasic 강의 문의 - 딸기 id 오류 및 move 오작동

0

222

1

LazyGrid 강의 문의 - 데이터가 30개 인데 로우가 3줄이면 27개만 노출됨

0

269

1

ScrollView에서 질문 있습니다.

0

286

1

MVVM에서 처음

0

216

1

ExtractView, @Binding 강의에서 .previewLayout(.sizeThatFits) 함수 관련해서 질문드립니다.

0

336

2

iOS 15 버전이후 프리뷰 문제 관련해서 질문드립니다.

0

343

2

VStack으로 프리뷰 생성

0

393

2

MVVM 폴더 안에서 Preview가 작동하지 않습니다.

0

249

1

Preview 질문

0

415

2

LazyGrid 질문 있습니다.

0

337

1

Textfield 입력시 한글 자음 모음 분리 현상이 발생 합니다

1

6531

2

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

0

288

1

NavigationView를 NavigationStack 으로 변경관련입니다.

1

357

1

Frame 강의에서 다른 결과물이 나와요

0

387

1

Frame에 대한 개념 질문

0

251

1

ShareLink에서 이미지 링크에서 이미지 크기 제한이 있나요?

0

317

2