UILabel의 높이를 문자 수로 동적으로 변경
테마
UILabel의 높이를 문자수로 동적으로 변경합니다.
경위
서버에서 얻은 문자열을 기반으로,
UILabel의 높이를 동적으로 변경해야했습니다.
그때 메모를 공유합니다.
구현 절차
서버에서 얻은 문자열을 기반으로,
UILabel의 높이를 동적으로 변경해야했습니다.
그때 메모를 공유합니다.
구현 절차
그럼 해보겠습니다.
1. UILabel을 StoryBoard에 배치하고 numberOfLines를 0(Storyboard에서는 Lines)으로 변경합니다.
이 설정을 잊으면 한 줄로 표시됩니다.
(한 줄에 맞지 않으면 "..."로 생략됩니다.)
2. UILabel의 높이 제약(Constraints)을 설정하고 소스 코드와 연관시킨다.
높이 제약은, 나중에 바꾸므로 적당해도 괜찮습니다.
StoryBoard에서 Outlet으로 소스 코드와 연결합니다.
UIViewController.swift @IBOutlet weak var heightConstrainsts: NSLayoutConstraint!
@IBOutlet weak var textLabel: UILabel!
연결이 완료되면 제약 조건이 아래와 같은 디스플레이로 바뀝니다.
3. UILabel의 높이를 얻는 extension을 만듭니다.
String.swiftimport UIKit
extension String {
func getTextSize(font:UIFont, viewWidth:CGFloat, padding:CGFloat) -> CGSize {
var size = CGSizeZero
if let s:CGSize = self.makeSize(viewWidth, font: font) {
size = CGSize(width: s.width, height: s.height + padding)
}
return size
}
func makeSize(width:CGFloat, font:UIFont) -> CGSize {
var size:CGSize = CGSizeZero
if self.respondsToSelector("boundingRectWithSize:options:attributes:context:") {
let bounds:CGSize = CGSize(width: width, height: CGFloat.max)
let attributes: Dictionary = [NSFontAttributeName: font]
let options = unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |
NSStringDrawingOptions.UsesFontLeading.rawValue, NSStringDrawingOptions.self)
let rect:CGRect = self.boundingRectWithSize(bounds, options: options, attributes: attributes, context: nil)
size = CGSize(width: rect.size.width, height: rect.size.height)
}
return size
}
}
4. 화면 크기와 글꼴 크기를 지정하고 높이를 얻습니다.
이번에는 아래와 같은 예로 설명합니다.
설정 요소
설정값
View 폭
UILabel의 너비를 화면 크기의 90%
글꼴 크기
17.0
UIViewController.swift let viewWidth = UIScreen.mainScreen().bounds.width * 0.9
let textSize = text.getTextSize(UIFont.systemFontOfSize(17),viewWidth: viewWidth, padding: 8)
textLabel.text = text
5. UILabel 높이를 업데이트합니다.
UIViewController.swift heightConstrainsts.constant = textSize.height
확인해 보겠습니다.
[3행 표시의 경우]
[조금 긴 문자열을 설정한 경우]
[개행 코드가 포함된 문자열을 설정한 경우]
요약
안전하고 동적으로 UILabel의 높이를 변경할 수있었습니다.
실수나 더 좋은 방법이 있다면 교수하십시오.
Reference
이 문제에 관하여(UILabel의 높이를 문자 수로 동적으로 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/e574b30fee811c297ea9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
높이 제약은, 나중에 바꾸므로 적당해도 괜찮습니다.
StoryBoard에서 Outlet으로 소스 코드와 연결합니다.
UIViewController.swift
@IBOutlet weak var heightConstrainsts: NSLayoutConstraint!
@IBOutlet weak var textLabel: UILabel!
연결이 완료되면 제약 조건이 아래와 같은 디스플레이로 바뀝니다.
3. UILabel의 높이를 얻는 extension을 만듭니다.
String.swiftimport UIKit
extension String {
func getTextSize(font:UIFont, viewWidth:CGFloat, padding:CGFloat) -> CGSize {
var size = CGSizeZero
if let s:CGSize = self.makeSize(viewWidth, font: font) {
size = CGSize(width: s.width, height: s.height + padding)
}
return size
}
func makeSize(width:CGFloat, font:UIFont) -> CGSize {
var size:CGSize = CGSizeZero
if self.respondsToSelector("boundingRectWithSize:options:attributes:context:") {
let bounds:CGSize = CGSize(width: width, height: CGFloat.max)
let attributes: Dictionary = [NSFontAttributeName: font]
let options = unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |
NSStringDrawingOptions.UsesFontLeading.rawValue, NSStringDrawingOptions.self)
let rect:CGRect = self.boundingRectWithSize(bounds, options: options, attributes: attributes, context: nil)
size = CGSize(width: rect.size.width, height: rect.size.height)
}
return size
}
}
4. 화면 크기와 글꼴 크기를 지정하고 높이를 얻습니다.
이번에는 아래와 같은 예로 설명합니다.
설정 요소
설정값
View 폭
UILabel의 너비를 화면 크기의 90%
글꼴 크기
17.0
UIViewController.swift let viewWidth = UIScreen.mainScreen().bounds.width * 0.9
let textSize = text.getTextSize(UIFont.systemFontOfSize(17),viewWidth: viewWidth, padding: 8)
textLabel.text = text
5. UILabel 높이를 업데이트합니다.
UIViewController.swift heightConstrainsts.constant = textSize.height
확인해 보겠습니다.
[3행 표시의 경우]
[조금 긴 문자열을 설정한 경우]
[개행 코드가 포함된 문자열을 설정한 경우]
요약
안전하고 동적으로 UILabel의 높이를 변경할 수있었습니다.
실수나 더 좋은 방법이 있다면 교수하십시오.
Reference
이 문제에 관하여(UILabel의 높이를 문자 수로 동적으로 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/e574b30fee811c297ea9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import UIKit
extension String {
func getTextSize(font:UIFont, viewWidth:CGFloat, padding:CGFloat) -> CGSize {
var size = CGSizeZero
if let s:CGSize = self.makeSize(viewWidth, font: font) {
size = CGSize(width: s.width, height: s.height + padding)
}
return size
}
func makeSize(width:CGFloat, font:UIFont) -> CGSize {
var size:CGSize = CGSizeZero
if self.respondsToSelector("boundingRectWithSize:options:attributes:context:") {
let bounds:CGSize = CGSize(width: width, height: CGFloat.max)
let attributes: Dictionary = [NSFontAttributeName: font]
let options = unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |
NSStringDrawingOptions.UsesFontLeading.rawValue, NSStringDrawingOptions.self)
let rect:CGRect = self.boundingRectWithSize(bounds, options: options, attributes: attributes, context: nil)
size = CGSize(width: rect.size.width, height: rect.size.height)
}
return size
}
}
이번에는 아래와 같은 예로 설명합니다.
설정 요소
설정값
View 폭
UILabel의 너비를 화면 크기의 90%
글꼴 크기
17.0
UIViewController.swift
let viewWidth = UIScreen.mainScreen().bounds.width * 0.9
let textSize = text.getTextSize(UIFont.systemFontOfSize(17),viewWidth: viewWidth, padding: 8)
textLabel.text = text
5. UILabel 높이를 업데이트합니다.
UIViewController.swift heightConstrainsts.constant = textSize.height
확인해 보겠습니다.
[3행 표시의 경우]
[조금 긴 문자열을 설정한 경우]
[개행 코드가 포함된 문자열을 설정한 경우]
요약
안전하고 동적으로 UILabel의 높이를 변경할 수있었습니다.
실수나 더 좋은 방법이 있다면 교수하십시오.
Reference
이 문제에 관하여(UILabel의 높이를 문자 수로 동적으로 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/e574b30fee811c297ea9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
heightConstrainsts.constant = textSize.height
[3행 표시의 경우]
[조금 긴 문자열을 설정한 경우]
[개행 코드가 포함된 문자열을 설정한 경우]
요약
안전하고 동적으로 UILabel의 높이를 변경할 수있었습니다.
실수나 더 좋은 방법이 있다면 교수하십시오.
Reference
이 문제에 관하여(UILabel의 높이를 문자 수로 동적으로 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/e574b30fee811c297ea9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(UILabel의 높이를 문자 수로 동적으로 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eKushida/items/e574b30fee811c297ea9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)