码迷,mamicode.com
首页 > 其他好文 > 详细

UI_11 自定义UITableViewCell、Cell的高度自适应

时间:2015-08-29 23:28:10      阅读:494      评论:0      收藏:0      [点我收藏+]

标签:

     UITableViewCell很难满足我们的需求,因此,CustomCell(自定义单元格)至关重要。下面将通过一个例子演示自定义Cell。第二部分演示根据文本内容自适应Label、Cell高度。



第一部分 CustomCell的创建

1、创建DemoTableViewController,继承自UITableViewController,并设置其为window的根视图

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    DemoTableViewController *demoVC = [[DemoTableViewController alloc] initWithStyle:UITableViewStylePlain];

    self.window.rootViewController = demoVC;

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];
   
return YES;

}


2、创建CustomTableViewCell,继承自UITableViewCell

声明CustomCell中所需属性:

@property(nonatomic, retain) UILabel *customLabel;

重写初始化方法:

CustomTableViewCell.m

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
   
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
   

    if (self) {

        self.customLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, 100, 30)];

        _customLabel.backgroundColor = [UIColor blueColor];
        [
self.contentView addSubview:_customLabel];

    }

    return self;

}


DemoTableViewController.m

3、设置TableView的section和row均为1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 1;

}


4、加载单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (!cell) {

        cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    cell.customLabel.text = @"Hello";

    return cell;

}



第二部分 Cell高度自适应

     使用NSString的类目 @interface NSString (NSExtendedStringDrawing)

中的方法

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);


1、创建getTextHeight:方法。参数设为UILabel

- (CGFloat)getTextHeight:(UILabel *)label

{

    /*

        Size:估算高度。

如果计算结果大于Size,则取小于Size的最大值作为返回值,否则,直接返回结果

        options:枚举值,表示以何种方式计算

     NSStringDrawingUsesLineFragmentOrigin 以行高为单位累加;还表示Size(第一个参数)的高度将被忽略

     NSStringDrawingUsesFontLeading 行高(包括行间距)

        attributes: @{NSFontAttributeName:font}

        context:NULL

     */

    CGSize maxSize = CGSizeMake(label.frame.size.width, 100);   //最大行高,即下面方法计算出来的行高小于maxSize.height

    CGRect rect = [label.text
                  
boundingRectWithSize:maxSize
                  
options:NSStringDrawingUsesLineFragmentOrigin
                  
attributes:@{NSFontAttributeName:label.font}
                  
context:NULL];
   
return rect.size.height;

}

2、声明textString属性作为测试字符串,并在viewDidLoad中为其赋值

DemoTableView.m

@interface DemoTableViewController ()
@property (nonatomic, retain) NSString *textString;
@end

@implementation DemoTableViewController

- (void)viewDidLoad {
    [
super viewDidLoad];

    self.textString = [[UILabel alloc] init];
   
_textString.text = @"第一行。\n第二行。。\n第三行。。。\n第四行。。。。\n第五行\n第六行";

}


3、在下面方法中增加内容设置customLabel高度

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
   
   
if (!cell) {
        cell = [[
CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
   
   
//设置customLabel高度

    cell.customLabel.text = _textString.text;
    cell.
customLabel.numberOfLines = 0;
   
   
CGRect rect = cell.customLabel.frame;
    rect.
size.height = [self getTextHeight:cell.customLabel];
    cell.
customLabel.frame = rect;

    

    return cell;

}


4、计算并设置cell高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   
return [self getTextHeight:_textString]+10;

}



UI_11 自定义UITableViewCell、Cell的高度自适应

标签:

原文地址:http://my.oschina.net/zooyf/blog/499050

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!