- HIG
- orthogonalScrollingBehavior
- 전달인자 레이블
- 앱개발
- iPad
- CollectionView
- UILabel
- Accessibility
- TOSS
- WWDC
- Apple
- Keychain
- 스위프트
- Combine+UIKit
- GOF
- Human Interface Guidelines
- 디자인패턴
- UIKit
- Swift
- IOS
- LanguageGuide
- 애플사이다
- github
- 애플
- lineBreakMode
- iTerm
- lineBreakStrategy
- 야곰아카데미
- DiffableDataSource
- Split View
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Today
- Total
애플사이다의 iOS 개발 일지
[줄바꿈] UILabel attributedText에 lineBreak 설정 - paragraphStyle.lineBreakMode 본문
[줄바꿈] UILabel attributedText에 lineBreak 설정 - paragraphStyle.lineBreakMode
Applecider 2022. 12. 20. 07:00지난 포스트 [줄바꿈] lineBreakMode 및 lineBreakStrategy 차이점을 작성하면서
UILabel에 attributedText를 사용하는 경우에는
label.lineBreakMode가 무시되고,
attributedText의 paragraphStyle.lineBreakMode를 설정해야 한다는 걸 봤다.
근데 실험해보니 잘못된 정보였음.. 🫠🫠🫠
둘 다 사용했을 때 마지막에 설정한 값으로 적용되는 것을 확인했다.
아래처럼 2개 방법으로 코드를 작성해서 비교해봤다.
- 방법-1. label.lineBreakMode 먼저 -> paragraphStyle.lineBreakMode 나중에 설정
- 방법-2. paragraphStyle.lineBreakMode 먼저 -> label.lineBreakMode 나중에 설정
private func setupKoreanLayout() {
// 방법-1. 먼저
hangulKoreanLabel.lineBreakMode = .byTruncatingMiddle // ✅
hangulKoreanLabel.lineBreakStrategy = .pushOut
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byTruncatingTail // ✅
paragraphStyle.lineBreakStrategy = .hangulWordPriority
let text = "이 프로퍼티는 줄임표(…)로 잘라내거나 텍스트를 크으으을리핑하는 등 텍스트 시스템이 해당 컨테이너에 맞지 않는 줄을 배치하는 방법을 제어합니다. 이 속성은 줄임표(…)로 잘라내거나 텍스트를 클리핑하는 등 텍스트 시스템이 해당 컨테이너에 맞지 않는 줄을 배치하는 방법을 제어합니다. 하하."
let attributedText = NSMutableAttributedString(
string: text,
attributes: [.foregroundColor: UIColor.darkGray,
.font: UIFont.systemFont(ofSize: 14),
.underlineStyle: NSUnderlineStyle.single.rawValue,
.paragraphStyle: paragraphStyle])
hangulKoreanLabel.attributedText = attributedText
// 방법-2. 나중에
// hangulKoreanLabel.lineBreakMode = .byTruncatingMiddle // ✅
// hangulKoreanLabel.lineBreakStrategy = .pushOut
}
방법-1 결과
나중에 호출된 paragraphStyle.lineBreakMode의 설정값이 적용됐다.
방법-2 결과
나중에 호출된 label.lineBreakMode의 설정값이 적용됐다.
공식문서에 따르면 시스템이 label.lineBreakMode를 무시해서 방법-1과 동일한 결과가 나올 거라고 예상했는데
아니었음..
결론
둘 다 사용했을 때 마지막에 설정한 값으로 적용되는 것을 확인했다.
UILabel - lineBreakStrategy 공식문서에 보면
attributedString이 있는 경우, 시스템은 label.lineBreakMode를 무시하므로
attributedString의 paragraphStyle.lineBreakMode를 설정해야 한다고 설명하고 있는데..
공식문서가 틀린 것 같다..?
아니면 예제 코드에서 NSParagraphStyle 대신 NSMutableParagraphStyle을 써서 그렇거나.. (아마 이게 이유인듯)
개인적으로 혼동을 막기 위해 attributedString을 사용할 때는 paragraphStyle.lineBreakMode를 사용하도록
통일하는 게 좋은 방법인 것 같다.
검색 키워드 : label attributedText lineBreak
- UILabel attributedText with multiple line break modes
- Reference
- 🍎 예제 코드 > GitHub Repo
- Apple Developer Documentation > NSParagraphStyle - lineBreakMode
- Apple Developer Documentation > NSParagraphStyle - lineBreakStrategy
- Apple Developer Documentation > UILabel - lineBreakMode
- Apple Developer Documentation > UILabel - lineBreakStrategy
'iOS' 카테고리의 다른 글
[mailto] 기본 메일 앱 및 이메일 템플릿 띄우기 (간단) (0) | 2022.12.22 |
---|---|
[attributedString] UILabel의 텍스트 커스텀하기 - font, underline, strike, alignment, lineHeight, paragraphStyle (0) | 2022.12.21 |
[줄바꿈] lineBreakMode 및 lineBreakStrategy 차이점 - 둘 다 필요할지도 (0) | 2022.12.18 |
[PTR] RefreshControl 및 ImageView에 Gif 이미지 넣기 (0) | 2022.12.10 |
[Redirect] 설정 앱을 띄워서 특정 앱의 설정 변경하기 (간단) (0) | 2022.11.14 |