ひさびさ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