iOS中對UITableView中的cell設置自動適應行高

該問題主要針對的是自定義tableView的cell時,在cell上添加一個UILabel用於顯示內容時,由於內容的多少無法預知,所以我們要根據label上顯示的文本的多少來設置cell的自動適應行高

1,首先 先創建自定義的cell(taleview根據自己的需求進行創建)

在.h中寫屬性和方法的聲明

<span style="font-size:14px;">@interface CustomTableViewCell : UITableViewCell
@property (nonatomic, retain) UILabel *storyLabel;
//根據傳入的文本計算cell的高度
 + (CGFloat)heightOfString:(NSString *)aString;
//根據傳入的文本重新設置Label的frame
 - (void)resetLablFrame:(NSString *)aString;
</span>

在.m中

宏定義控件的基本屬性

#import "CustomTableViewCell.h"
<span style="color:#FFCC33;">#define PLACE</span> 10 //cell上控件之間以及和邊界間的間距
#define HIGHT 120 //storyLabel的高度
@implementation CustomTableViewCell

創建一個label,添加到cell上

self.storyLabel = [[UILabel alloc] initWithFrame:CGRectMake( PLACE ,  PLACE , 300 , HIGHT)];
        _storyLabel.numberOfLines = 0;
        [self addSubview:_storyLabel];
        [_storyLabel release];

實現第一個方法

其中 CGSizeMake(300, 0)中的第一個參數是storyLabel的寬度 第二個參數0是高度,由於高度是未知的所以設置爲0

+ (CGFloat)heightOfString:(NSString *)aString
{
    CGRect rect = [aString boundingRectWithSize:CGSizeMake(300, 0) options:NSStringDrawingUsesLineFragmentOrigin | 
<span style="font-family:FangSong_GB2312;">       </span>NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}  context:nil];
    return rect.size.height + 2 * PLACE ;
}

- (void)resetLablFrame:(NSString *)aString
{
    CGRect rect = [aString boundingRectWithSize:CGSizeMake(300, 0) options:NSStringDrawingUsesLineFragmentOrigin | 
<span style="font-family:FangSong_GB2312;">       </span>NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}  context:nil];
    
    CGRect frame = _storyLabel.frame;
   //重新設定storylabel的frame
<span style="font-family:FangSong_GB2312;">     </span> _storyLabel.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, rect.size.height);
}
完成上面的步驟,我們就做完了設置工作,那麼只需要調用的時候傳入參數就可以實現了 那麼下面就將演示如何運用

在創建cell的時候,給方法進行賦值,這樣就可以計算cell的高度

在代理方法中實現返回cell的行高











發佈了22 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章