【发布时间】:2012-05-26 16:20:14
【问题描述】:
我在详细视图控制器中有一个 UILabel,因此它的内容会根据选定的表格行而变化。我有一个问题,我会根据文本为我的 UILabel 设置一个固定宽度和一个动态高度。我怎样才能做到这一点? (我很抱歉我的错误,但我不是英语)
【问题讨论】:
标签: iphone objective-c sdk
我在详细视图控制器中有一个 UILabel,因此它的内容会根据选定的表格行而变化。我有一个问题,我会根据文本为我的 UILabel 设置一个固定宽度和一个动态高度。我怎样才能做到这一点? (我很抱歉我的错误,但我不是英语)
【问题讨论】:
标签: iphone objective-c sdk
我喜欢继承 UILabel 来为我做这件事。
AutosizingLabel.h
#import <UIKit/UIKit.h>
@interface AutosizingLabel : UILabel {
double minHeight;
}
@property (nonatomic) double minHeight;
- (void)calculateSize;
@end
AutosizingLabel.m
#define MIN_HEIGHT 10.0f
#import "AutosizingLabel.h"
@implementation AutosizingLabel
@synthesize minHeight;
- (id)init {
if ([super init]) {
self.minHeight = MIN_HEIGHT;
}
return self;
}
- (void)calculateSize {
CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f);
CGSize size = [self.text sizeWithFont:self.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
[self setLineBreakMode:UILineBreakModeWordWrap];
[self setAdjustsFontSizeToFitWidth:NO];
[self setNumberOfLines:0];
[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, MAX(size.height, MIN_HEIGHT))];
}
- (void)setText:(NSString *)text {
[super setText:text];
[self calculateSize];
}
- (void)setFont:(UIFont *)font {
[super setFont:font];
[self calculateSize];
}
@end
要使用它,请在您的项目中导入/创建 .h 和 .m 文件。然后,如果您在代码中创建 UILabel,它看起来像这样:
#import "AutosizingLabel.h"
- (void)viewDidLoad {
[super viewDidLoad];
AutosizingLabel *label = [[AutosizingLabel alloc] init];
label.text = @"Some text here";
[self.view addSubview:label];
}
如果您使用的是 XIB,您可以选择任何 UILabel 并单击右侧边栏中的 Identity Inspector 将其类设置为 AutosizingLabel。无论哪种情况,设置.text 属性都会自动更新标签的大小。
【讨论】:
你可以做到..这是代码。
UILabel *yourlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, sizeToFit)];
yourlabel.numberOfLines = 0;
如有任何疑问,请发表评论。
【讨论】: