簡體   English   中英

具有固定寬度和高度的UILabel

[英]UILabel with fixed width and flexible height

我在明細視圖控制器中有一個UILabel,因此其內容根據所選的表行而變化。 我遇到問題,我會根據文本設置UILabel的固定寬度和動態高度。 我怎樣才能做到這一點? (為我的錯誤感到抱歉,但我不是英語)

我喜歡將UILabel子類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;

對於任何查詢,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM