IOS7中動態計算UILable的高度

來源:互聯網
上載者:User

.h檔案

#import  @interface UILabel (ContentSize) - (CGSize)contentSize; @end

.m檔案

#import "UILabel+ContentSize.h" @implementation UILabel (ContentSize)- (CGSize)contentSize {   NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];    paragraphStyle.lineBreakMode = self.lineBreakMode;    paragraphStyle.alignment = self.textAlignment;        NSDictionary * attributes = @{NSFontAttributeName : self.font,                                  NSParagraphStyleAttributeName : paragraphStyle};        CGSize contentSize = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, MAXFLOAT)                                              options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)                                           attributes:attributes                                              context:nil].size;    return contentSize;}@end

這個類是在別人的基礎上修改的。

下面是具體的實現:

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 20)];    label.font = [UIFont boldSystemFontOfSize:15.0f];  //UILabel的字型大小    label.numberOfLines = 0;  //必須定義這個屬性,否則UILabel不會換行    label.textColor = [UIColor whiteColor];    label.textAlignment = NSTextAlignmentLeft;  //文本對齊    [label setBackgroundColor:[UIColor redColor]];    label.lineBreakMode = NSLineBreakByWordWrapping;        NSLog(@"%d",label.lineBreakMode);    //寬度不變,根據字的多少計算label的高度    NSString *str = @"伴隨著張震嶽的這首老歌,彷彿我又回到了過去,回到了大學即將分別的日子,帶著不舍與迷惘和他們說再見。又是一年畢業季,看著朋友圈各種曬畢業照,畢業旅行照,學士帽漫天的飛舞,各種送別活動在鮮花和掌聲中慢慢退去色彩,心裡不時充滿著各種思念。離開校園整整一年了,每當和別人談起母校各種自豪,大學生活各種多彩,人生經曆各種豐富,其實內心還是留有種種遺憾;四年的蹉跎時光,有人收穫了知識,有人收穫了人生閱曆,還有人收穫了愛情,而我收穫的只有那純潔的友誼,兄弟情。    分別整整一年了,還記得那時我們都是多麼的不舍,同學情,兄弟情,混合著酒精流到心裡,一米八幾的大男孩哭的稀裡嘩啦,擁抱著說再見;之後的我們離開了熟悉的校園,奔赴在各個工作崗位,去體現自己的價值,為生活而忙碌著;一轉身,有些人真的就再也不見。      畢業一周年,你們還好嗎?工作還順利嗎?學習還順心嗎?一切都回不了頭,只能在心裡默默地想著你們,希望你們安好。。。";//    CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];//    //根據計算結果重新設定UILabel的尺寸//    [label setFrame:CGRectMake(20, 10, 280, size.height)];//    label.text = str;    label.text = str;        [label setFrame: CGRectMake(20, 20, 280, [label contentSize].height)];        [self.view addSubview:label];

上面的注釋部分是老的方法。

這裡要注意幾點:

1、我在調用contentSize前設定下label.lineBreakMode屬性。
2、文字到底換不換行的關鍵是設定CGSizeMake(w,h),區別主要在w,h的值修改。


Demo地址



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.