該問題主要針對的是自定義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的行高