私はUILabelsのための高さを処理するためのカテゴリを作成しました:
UILabel + TCFlexibleHeight.h:
#import <UIKit/UIKit.h>
@interface UILabel (TCFlexibleHeight)
- (CGFloat)heightForText:(NSString*)text;
- (CGFloat)heightForCurrentText;
- (CGFloat)adjustHeightForCurrentText;
@end
U ILabel + TCFlexibleHeight.m:このカテゴリには、帰属文字列を処理し、クリップする行の折り返しのセットを必要としないことを
[themeLabel setFrame:CGRectMake(leftMargin, mainScrollView.frame.origin.y + topPadding, 274, [themeLabel heightForCurrentText])];
注:
#import "UILabel+TCFlexibleHeight.h"
static const NSInteger kMaxLines = 1000;
@implementation UILabel (TCFlexibleHeight)
- (CGFloat)heightForText:(NSString*)text {
if (text == nil) {
return 0;
}
NSInteger numberOfLines = self.numberOfLines > 0 ? self.numberOfLines : kMaxLines;
CGSize size = CGSizeMake(self.frame.size.width, self.font.lineHeight * numberOfLines);
return [text sizeWithFont:self.font constrainedToSize:size lineBreakMode:self.lineBreakMode].height;
}
- (CGFloat)heightForCurrentText {
return [self heightForText:self.text];
}
- (CGFloat)adjustHeightForCurrentText {
CGFloat height = [self heightForCurrentText];
CGRect frame = self.frame;
frame.size.height = height;
return height;
}
@end
このカテゴリでは、あなたのコードは次のようになります文字に。
返される幅は何ですか? – Fogmeister
高さは 'CGFloat'で表されるので、' nil'は意味をなさない。 – trojanfoe
@Fogmeisterそれは 'sizeThatFits'を使った後に0.0で、手作業で設定した後は274です。 –