스유에서 lineHeight과 letterSpacing 적용하기

2025. 7. 22. 22:55·iOS/SwiftUI
반응형

👋 들어가기 전

swiftUI에서 font에서 제공하는 lineHeight을 조절하고 싶으면, 별도의 가공이 필요하다.

 

lineHeight 관련해서는 아래 포스팅을 보면 조금 도움이 될 것  같다.

 

[Text 시리즈 2] Font Metrics 와 Glyph metrics

👋 들어가기 전이전 시리즈https://hamp.tistory.com/236 [Text 시리즈 1] Typographical Concepts👋 들어가기 전Text는 가장 기본적인 UI면서, 가장 중요한 UI라고 생각한다.이미지가 없는 서비스는 있더라도, Text

hamp.tistory.com

 

우리는 이 조건을 만족하기위해, 약간의 속임수를 부릴 생각이다.

왜냐하면 SwiftUI에서는 lineHeight은 없고 lineSpacing만 있기 때문이다.


🏁 학습할 내용

  • 목표
  • lineSpacing이란
  • 속임수

🎯 목표

먼저 문제 상황을 살펴보자.

 

먼저 lineHeight은 uifont에서 알아서 던져준다.

 

size 20기준으로는 lineHeight = 23.867188 , 즉 100%가 23.8 뭐시기다.

 

 

 

우리는 이걸 130%로 늘리고 싶다.

 

우리는 저 빨간 부분을 15% , 15%로 나눠서 넣으면될 것 같다.

 

앞서 말한 것 처럼 swiftUI에서는 lineHeight을 직접 조절할 수 없다.

 

그러면 2줄 이상이될 때는 어떨까??

 

우리가 원하는 비율이 되려면 줄 사이 간격도 조절이 필요하다.


📏 lineSpacing이란

먼저 SwiftUI에서 우리에게 제공해주는 lineSpacing이 무엇인지 알아보자.

 

lineSpacing은 결정적으로, 2줄 이상이 될 때 눈에 보인다.

 

lineSpacing = 윗줄의 bottom ~ 아랫줄의 top 사이의 간격

 

lineSpacing을 30으로 늘려보니 다음과 같은 결과를 볼 수 있다.

예상했던 것처람 줄 사이 간격이 늘었다.


🎴 속임수

우리는 lineHeight을 2개의 padding과 1개의 lineSpacing으로 속일 수 있다.

여기서 각 막대의 높이는 다음과같다.

 

즉, 더해질 높이 H = 2개의 padding과 1개의 lineSpacing으로 나눠가질 수 있다.

  • paading 1개 = H/4, 위 아래 2개면, H/2
  • linespacing은 남은 H/2

코드로 쓰면 다음과 같다.

public extension View {
  func font<T: TextStyleType>(_ style: T) -> some View {
    let ratio: CGFloat = style.lineHeightRatio - 1 // 1.3 - 1 = 30%
    let height = style.uiFont.lineHeight *  ratio // 추가로 더해질 높이
  	let harf = height / 2
    let padding = harf / 2
    let letterSpacing = style.size * style.letterSpacingRatio

    return self.font(style.font)
      .padding(.vertical, padding)
      .lineSpacing(harf)
      .kerning(letterSpacing)
  }
}


출처

https://rriver2.tistory.com/entry/SwiftUI-LineHeight-LineSpace

 

[SwiftUI] LineHeight, LineSpace

🔧 문제 상황바야흐로.. 때는... 디자이너가 font system을 만들어줬던... 그 어느날....  사실 Cherish는 빠른 MVP를 위해서 LineHeight를 100%로 해달라고 디자이너한테... 부탁했었는데, 이번 프로젝트때

rriver2.tistory.com

https://www.hackingwithswift.com/forums/swiftui/how-to-transfer-the-line-parameter-from-figma-to-swiftui-layout/23779

 

How to transfer the line parameter from figma to swiftUI layout? – SwiftUI – Hacking with Swift forums

Link copied to your pasteboard.

www.hackingwithswift.com

 

반응형

'iOS > SwiftUI' 카테고리의 다른 글

BlendMode  (0) 2025.07.26
[@Environment] layoutDirection  (0) 2025.07.26
.contentShape  (0) 2025.07.19
커스텀 SwipePopNavigationStack 구현하기  (6) 2025.07.13
커스텀 뷰를 만들 때 고민점  (0) 2025.07.05
'iOS/SwiftUI' 카테고리의 다른 글
  • BlendMode
  • [@Environment] layoutDirection
  • .contentShape
  • 커스텀 SwipePopNavigationStack 구현하기
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (304)
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (37)
        • swift (32)
        • python (4)
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (13)
        • 어노테이션 (1)
        • 튜토리얼 (11)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    투포인터
    UIKit
    Spring
    프로그래머스
    Swift
    GIT
    Tuist
    dp
    boostcamp
    CS
    백준
    concurrency
    property
    IOS
    dfs
    AVFoundation
    dispatch
    lifecycle
    protocol
    SwiftUI
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
스유에서 lineHeight과 letterSpacing 적용하기
상단으로

티스토리툴바