나의 발자취

SwiftUI View란? View Modifiers 본문

앱 개발/iOS

SwiftUI View란? View Modifiers

달모드 2023. 6. 20. 02:00

a screen in an iOS app is made up of SwiftUI views like TextImageLabel and Button.

Apple defines View as a protocol.

 

 

struct HappyView: View {
   var body: some View {
       Text("Hello, World!")
   }
}

애플에서 View 는 프로토콜로 정의한다. (프로토콜이란 특정 태스크를 완료하기 위해 필요한 요구사항들의 집합의 초석을 정의하는 것)

위 코드에서 View는 구조체다. 구조체는 서로 관련있는 속성(properties)과 함수의 집합을 캡슐화한다.

HappyView: View 에서 : ViewHappyViewView 프로토콜을 따른다는 것을 뜻한다.

 

bodyView 프로토콜의 속성(property)이다. 그래서 모든 커스텀 뷰를 구현할 때는 그 안에 body가 있어야한다. body는 내 뷰에 컨텐츠를 제공하는데, Button, Text 등 View 프로토콜에 따르는 어떠한 것들도 올 수 있다. 위의 코드에서 bodyText 뷰를 가진다.

 

 

 

View Modifiers

뷰 모디파이어는 뷰에 attribute를 적용해서 뷰가 어떻게 나타나는지를 변경하는 것이다.

예를 들어 단순한 텍스트에 속성을 주어 변경하고 싶을 때, 이렇게 하면 된다.

Text("Hello, World!")
   .foregroundColor(.blue)
   .bold()

여기서 foregroundColor(), bold()와 같은 것들이 뷰 모디파이어이다. 그리고 이들은 서로 chained될 수 있다.(foregroundColor(.blue))

 

뷰 모디파이어의 순서는 딱히 중요하진 않지만 달라지는 몇몇 예시들이 있다. 뭐 요런 식

Text("I'm happy!")
   .border(Color.black, width: 1)
   .padding()

Text("I'm happy!")
   .padding()
   .border(Color.black, width: 1)

 

 

그리고 Text 뷰에 적용할 수 있는 다른 뷰 모디파이어를 보려면 옆에 . 을 찍으면 된다.

Text 뷰 모디파이어 예시

1. font() - 안에 .title / .headline / .footnote 등이 들어갈 수 있음. (.font(.title))

그리고 아래와 같은 식으로 커스텀 디자인을 할 수도 있다.

 Text("Hello")
     .font(.title)
     
  Text("World!")
     .font(Font.custom("Helvetica", size: 24))

여기서 Font 는 여러가지 방식으로 초기화 될 수 있는 구조체다. 애플 공식 문서에서 Fontinit() 메서드를 보면 아래와 같이 생겼다.

 static func custom(_ name: String, size: CGFloat) -> Font

static 키워드는 타입 메서드라는 것을 말하는데, 타입(구조체) 자체로 불리는 메서드를 말한다. 

 

2. multilineTextAlignment()

안에 .center 등을 넣어 사용할 수 있다.

 

3. padding()

뷰 주변에 공간을 더해준다. 기본값은 모든 변에 대하여 공간을 주지만, 특정 변에 대하여 커스텀하고싶으면 EdgeInsets을 이용하여 패딩을 주면 된다.

 Text("Checking alignment of text")
     .padding(EdgeInsets(top: 3, leading: 5, bottom: 10, trailing: 20))

또는 그냥 .padding(.top, 10)만 해도 위에만 적용된다.

 

4. bold() 글자 굵게

5. foregroundColor() 글자 색상을 정한다.

6. border() Text view 주변에 직사각형 테두리를 그려준다. 예시:   .border(Color.black, width: 1)

'앱 개발 > iOS' 카테고리의 다른 글

튜플 특징  (0) 2023.06.28
View: Vstack, Hstack, Zstack  (0) 2023.06.20
Switch Statement: Where clause  (0) 2023.06.20
XCode 파일 구조(Project navigator File lists) 설명  (1) 2023.06.14
Bundle Identifier? Organization Identifier?  (0) 2023.06.13
Comments