# iOS | Swift/--- SwiftUI

SwiftUI Tutorials_ GridView

jiniz.ll 2022. 10. 26. 19:10

KavSoft 채널의 튜토리얼에 대한 내용을 하나씩 해보면서 SwiftUI에 대해 공부해보려고 합니다.

따라서 이 글은 위 튜토리얼에 대한 정리 글입니다.

 

 

  • Xcode 14.0.1
  • iOS 16.0

 

이번 내용은 Stack 을 사용해서 GridView 형태로 이미지를 그리는 것이다.

6장의 이미지를 준비하여 asset에 추가해 둔 뒤  한 행에 하나의 이미지를 column의 개수만큼 보여지도록 구현하였다.

** 코드는 일부 수정하여 영상과 조금 다를 수 있다.

 

이미지의 사이즈 또한 width와 height가 같도록 size를 두었다.

ScrollView의 frame을 설정한 이유는 그냥 없이 구현하니 스크롤 뷰의 width가 컨텐츠의 폭에 맞춰져 추가적으로 설정해주었다.

struct GridView: View {
    var body: some View {
        Grid()
    }
}

struct Grid: View {
    
    let row = 6
    let column = 3
    
    var body: some View {
        GeometryReader { geometry in
            let size = geometry.size.width / CGFloat(column) - 20
            ScrollView(.vertical, showsIndicators: false) {
                VStack {
                    ForEach(1..<(row+1), id: \.self) { i in
                        HStack {
                            ForEach(0..<column, id: \.self) { _ in
                                Image("img\(i)")
                                    .resizable()
                                    .frame(width: size)
                                    .cornerRadius(15)
                            }
                        }
                        .frame(height: size)
                    }
                }
            }
            .frame(width: geometry.size.width)
            .background(Color.yellow)
        }
    }
}

 

 

 

TIL 1.

Error: Cannot convert value of type 'ClosedRange<Int>' to expected argument type 'Range<Int>'

- 처음 ForEach를 상수로 작성했을 때 발생한 에러이다. 상수로 범위를 지정할 때는 closedRange(즉, ...)를 사용하면 에러가 발생한다.

- 우선 해결 방법은 1. Range타입으로 설정하거나(..<) 2. id를 지정해주면 에러는 사라진다.

- 해결법은 어렵지 않지만 왜인지 조금 궁금하다.

 

- 가장 기본적인 이유는 ClosedRange와 Range는 다른 타입이고, ForEach initializer에 ClosedRange를 제공해주지 않는다. 왜일까?

 

 

 

TIL 2.

Warning: Non-constant range: argument must be an integer literal

- Range 타입에서 숫자 대신 변수로 변경했을 때 발생한 경고문이다.

- 이 경우에도 id를 지정해주면 경고문이 사라진다.

 

'# iOS | Swift > --- SwiftUI' 카테고리의 다른 글

SwiftUI Tutorials_ Context Menu  (0) 2022.11.16
SwiftUI Tutorials_ Search Bar  (0) 2022.11.15
SwiftUI Tutorials_ TopBar Style TabView  (0) 2022.11.09
SwiftUI Tutorials_ TabView  (0) 2022.10.31
SwiftUI Tutorials_ Json Parsing  (0) 2022.10.26