UILabel具有固定的宽度和灵活的高度

Gia*_*nna 7 iphone sdk objective-c

我在详细信息视图控制器中有一个UILabel,因此其内容会根据所选的表行而改变.我有一个问题,我会为我的UILabel设置一个固定的宽度,并根据文本设置一个动态高度.我怎样才能做到这一点?(我很抱歉我的错误,但我不是英文)

Jos*_*all 8

我喜欢子类UILabel为我做这个.

AutosizingLabel.h

#import <UIKit/UIKit.h>


@interface AutosizingLabel : UILabel {
    double minHeight;
}

@property (nonatomic) double minHeight;

- (void)calculateSize;

@end    
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

要使用它,请在项目中导入/创建.h和.m文件.然后,如果您正在创建您UILabel的代码,它将看起来像这样:

#import "AutosizingLabel.h"

- (void)viewDidLoad {
    [super viewDidLoad];

    AutosizingLabel *label = [[AutosizingLabel alloc] init];
    label.text = @"Some text here";
    [self.view addSubview:label];
}
Run Code Online (Sandbox Code Playgroud)

如果您正在使用XIB,则可以选择任何UILabel并单击右侧边栏中的Identity Inspector将其类设置为AutosizingLabel.在任何一种情况下,设置.text属性都会自动更新标签的大小.


jam*_*mil -3

你可以做到的..这是代码。

UILabel *yourlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, sizeToFit)];
yourlabel.numberOfLines = 0;
Run Code Online (Sandbox Code Playgroud)

对于任何疑问,请发表评论。