【iOS】UILabelの高さを求める カスタムフォント対応版
ひさびさiOSー
でーもーさーらーすーだーけー
日本語の情報どこにもなかったし?
deltaの計算はどっかから持ってきたのをごにょごにょしただけなので、0.2とか0.5は何の値だか不明w
まぁ、ちゃんと動くっぽい。
メソッド呼ぶ前にtextとfontとview.widthが設定されているのが前提ー
あんま好きじゃないけど、こっちのほうが実用的かなーと。
iOSはメソッド長くなるから嫌いねー
#import <CoreText/CoreText.h> @implementation UILabel (Helper) - (void)adjustHeightWithMinHeight:(CGFloat)minHeight { CTFontRef ctFont = CTFontCreateWithName((CFStringRef)self.font.fontName, self.font.pointSize, NULL); CGFloat leading = CTFontGetLeading(ctFont); if (leading > 0) leading = floor(leading + 0.5); CGFloat delta = 0; if (leading <= 0) { CGFloat ascent = CTFontGetAscent(ctFont); CGFloat descent = CTFontGetDescent(ctFont); delta = floor (0.2 * floor(ascent + 0.5) + floor(descent + 0.5) + leading + 0.5); } CGSize maximumLabelSize = CGSizeMake(self.frame.size.width, FLT_MAX); CGSize expectedLabelSize = [self.text boundingRectWithSize:maximumLabelSize options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName : self.font } context:nil].size; self.frame.size.height = MAX(minHeight, expectedLabelSize.height + delta); } @end