인프런 커뮤니티 질문&답변

열쓰님의 프로필 이미지
열쓰

작성한 질문수

[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17

LazyGrid

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

해결된 질문

작성

·

214

0

안녕하세요 Jacob 강사님.

좋은 강의 잘 듣고 있습니다.

 

현재 다른 질문에 답변해주신 글을 확인해서 iOS 15버전 업데이트 후 프리뷰 문제로 뷰를 추가하면 새로운 프리뷰가 생기지 않아서 새로운 클래스나 구조체를 만들고 프리뷰를 추가해줘야 한다고 들었는데요.

그게 특정 강의에서만 해당되는게 아닌 지금 현재 강의들에서 프리뷰가 안생기는 문제들은 알려주신 방법대로 모두 진행하면 될까요? 현재 'LazyGrid' 강의 듣고 있고 Frame 강의때 프리뷰 문제를 발견해서 그 이후에 쭉 프리뷰가 나눠지는 부분은 알려주신 대로 처리했었습니다. 올바르게 하고 있는게 맞는지 궁금해서 질문드립니다.

 

감사합니다.

답변 2

0

Jacob(제이콥)님의 프로필 이미지
Jacob(제이콥)
지식공유자

안녕하세요 열쓰님.

먼저 프리뷰 문제에 대해서 질문주셔서 감사합니다. xcode15 이후 프리뷰 문제를 여러 강의에서 발견하였습니다.

제가 전 강의 체크해서 #Preview{} 메크로 형태로 바꾸어서 강의 자료를 다시 업로드 하였습니다.

질문 주신 강의 LazyGrid 변경된 부분은 강의 자료 예제코드 를 참조해주시고, 공지사항으로 #Preview 가 문제된 강의 목록 안내하도록 하겠습니다.

추후, 강의 전반적으로 영상 업데이트 하여 수정하도록 하겠습니다.

감사합니다.

Jacob


//
//  LazyGridBasic.swift
//  SwiftUIBasic
//


import SwiftUI

struct LazyGridBasic1: View {
	// LazyVGrid
	// columns 의 갯수를 3개로 설정
	let columns: [GridItem] = [
		GridItem(.flexible(), spacing: 6, alignment: nil),
		GridItem(.flexible(), spacing: 6, alignment: nil),
		GridItem(.flexible(), spacing: 6, alignment: nil),
	]
	
    var body: some View {
        
		// 1 - LazyVGrid
		ScrollView {
			
			// Hero 부분 (위에 사진 부분)
			Rectangle()
				.fill(Color.orange)
				.frame(height: 400)
			
			LazyVGrid(
				columns: columns,
				alignment: .center,
				spacing: 6,
				pinnedViews: [.sectionHeaders]) {
					// Section 1
					Section(header: Text("Section1")
						.foregroundColor(.white)
						.font(.title)
						.frame(maxWidth: .infinity, alignment: .leading)
						.background(Color.blue)
						.padding()
					) {
						ForEach(0..<20) { index in
							Rectangle()
								.fill(Color.gray)
								.frame(height: 150)
								.overlay(
									Text("\(index) 번")
								)
						}
					} //: Section 1
					
					// Section 2
					Section(header: Text("Section2")
						.foregroundColor(.white)
						.font(.title)
						.frame(maxWidth: .infinity, alignment: .leading)
						.background(Color.red)
						.padding()
					) {
						ForEach(0..<20) { index in
							Rectangle()
								.fill(Color.green)
								.frame(height: 150)
								.overlay(
									Text("\(index) 번")
								)
						}
					} //: Section 2
				}
		} // :1번
		

    }
}

struct LazyGridBasic2: View {
    
    // LazyHGrid
    // title 을 1000 개 변수를 생성
    // ["목록 1", "목록 2", .... "목록 1000"] [Sting]
    let title: [String] = Array(1...1000).map {"목록 \($0)"}
    
    // 화면 그리드형식으로 채워줌
    let layout: [GridItem] = [
        GridItem(.flexible(maximum: 80)),
        GridItem(.flexible(maximum: 80)),
        GridItem(.flexible(maximum: 80))
    ]
    
    var body: some View {
        // LazyHGrid
        // ScrollView horizontal
        ScrollView(.horizontal) {
            LazyHGrid(rows: layout, spacing: 20) {
                ForEach(title, id: \.self) { item  in
                    VStack {
                        Capsule()
                            .fill(Color.yellow)
                            .frame(height: 30)
                        
                        Text(item)
                            .foregroundColor(Color.blue)
                    }
                }
            }
        }
    }
}

// XCode 15 (iOS 17) 이후 PreView 변경 적용
#Preview("1.LazyVGrid") {
   LazyGridBasic1()
}

#Preview("2.LazyHGrid") {
   LazyGridBasic2()
}

0

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

열쓰님, SwiftUI에서 iOS 15 버전 이후 프리뷰가 생성되지 않는 문제에 대한 질문 감사드립니다.

말씀해주신 이슈는 Xcode 업데이트 후 프리뷰 관련해서 발생할 수 있는 일반적인 문제로 보입니다. 따라서 특정 강의에 한정되지 않고 iOS 15 버전 이후의 실습 환경에서 프리뷰가 정상적으로 작동하지 않을 때는 강사님이 알려주신 방법대로 새로운 프리뷰를 추가해주시는 것이 적절한 해결 방안이 됩니다.

‘LazyGrid’ 강의를 비롯한 이후 강의들에서도 프리뷰 문제가 지속된다면, 그동안 해왔던 방식대로 새로운 클래스나 구조체를 만들어서 프리뷰를 추가해주시는 것이 올바른 접근입니다.

계속해서 직접 해결책을 적용하며 학습을 진행해 보시고, 추가적인 질문이나 도움이 필요하신 경우에는 인프런의 수강 전 문의 게시판을 통해서 질문을 남기셔서 지식공유자님께 직접 도움을 받을 수도 있습니다.

학습에 보탬이 되셨길 바라며 더 궁금하신 점이 있으시면 언제든지 문의해 주세요.
감사합니다!

열쓰님의 프로필 이미지
열쓰

작성한 질문수

질문하기