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

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;

}

时间: 2025-01-19 21:54:08

UI_11 自定义UITableViewCell、Cell的高度自适应的相关文章

[Swift通天遁地]二、表格表单-(3)在表格中嵌套另一个表格并使Cell的高度自适应

本文将演示如何在表格中嵌套另一个表格并使Cell的高度自适应,创建更加强大的布局效果. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Touch Class]->[Next]-> [Class]:CustomizeUITableViewCell ,类名. [Subclass of]:UITableViewCell ,父类 [Language]:Swift ->[Next]->[Create]在项目导航区,打开刚刚创建的代码

自定义UITableViewCell:Cell高度、分割线、间距等

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格. 通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell.而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义. 如何动态调整Cell

转:自定义UITableViewCell:Cell高度、分割线、间距等

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格. 通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell.而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义. 如何动态调整Cell

iOS -- UITableViewCell -- 通过代码自定义Cell(cell的高度不一致)

1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 Ø添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中) Ø进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片) 3.提供2个模型 Ø数据模型: 存放文字数据\图片数据 Øframe模型: 存放数据模型\所有子控件的frame\cell的高度 4.cell拥有一个frame模型(不要直接拥有数据

uitableviewcell高度自适应笔记

今天看了几篇uitableviewcell高度自适应的文章,大体分为两种方式. 第一种方式,cell里面有label,在cellforrow绘制的时候计算Label的可能高度,并且在此时重新计算cell的高度,然后在heightforrow的时候返回这个cell新的高度.也就是说这些cell全部是计算出来的,根据里面的label的高度(label为contentView).http://blog.csdn.net/swingpyzf/article/details/18093959 第二种方式是

通过代码自定义cell(cell的高度不一致的情况)

iOS开发中,系统的UITableViewCell局限性很大,所以大多数情况下我们需要自定义一个tableViewCell,更复杂的情况是,每一行的cell高度都不一定,由cell的内容决定,典型的例子就是新浪微博了,这里可以提供一个自定义tableViewCell的思路. 1.新建一个继承自UITableViewCell的类.2.重写initWithStyle:reuseldentifier:方法        ^添加所有需要显示的子控件(不需要设置子控件的数据和frame,子控件要添加到co

iso 通过代码自定义cell (cell的高度不一致)

///-------1.1数据模型.h--------- #import <Foundation/Foundation.h> @interface MLStatus : NSObject @property(nonatomic, copy) NSString *text; @property(nonatomic, copy) NSString *icon; @property(nonatomic, copy) NSString *name; @property(nonatomic, copy)

IOS TableView的Cell高度自适应,UILabel自动换行适应

原文链接 :http://blog.csdn.net/swingpyzf/article/details/18093959 需求: 1.表格里的UILable要求自动换行 2.创建的tableViewCell的高度会自动适应内容的高度 一.用xcode构建项目,创建一个有tableView的视图,用纯代码的形式实现: 1.创建一个UIViewController类,定义一个UITableView,实现TableView的委托和数据源协议 [objc] view plaincopyprint? /

iOS开发总结-UITableView 自定义cell和动态计算cell的高度

UITableView cell自定义头文件: shopCell.h #import <UIKit/UIKit.h> @interface shopCell : UITableViewCell @property (strong, nonatomic)  UIImageView *image;@property (strong, nonatomic)  UILabel *name;@property (strong, nonatomic)  UILabel *itemshop;@propert