AutoLayout UITableViewCell 动态高度

从这里http://www.cnblogs.com/liandwufan/p/4516956.html?utm_source=tuicool 转载过来的

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

//

static NSString * cellid = @"PayMentTableViewCell";

PayMentTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellid];

if( !cell )

{

cell = [[[NSBundle mainBundle] loadNibNamed:cellid owner:self options:nil] lastObject];

}

[cell refresh:[eventArray objectAtIndex:indexPath.row]];

[cell setNeedsUpdateConstraints];

[cell updateConstraintsIfNeeded];

return cell;

}

#pragma mark -

#pragma mark table view delegate methods

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 判断indexPath对应cell的重用标示符,

static NSString *reuseIdentifier =@"PayMentTableViewCell";

// 从cell字典中取出重用标示符对应的cell。如果没有,就创建一个新的然后存储在字典里面。

// 警告:不要调用table view的dequeueReusableCellWithIdentifier:方法,因为这会导致cell被创建了但是又未曾被tableView:cellForRowAtIndexPath:方法返回,会造成内存泄露!

PayMentTableViewCell *cell = [offscreenCells objectForKey:reuseIdentifier];

if (!cell)

{

cell = [[[NSBundle mainBundle] loadNibNamed:reuseIdentifier owner:self options:nil] lastObject];

[offscreenCells setObject:cell forKey:reuseIdentifier];

[cell refresh:[eventArray objectAtIndex:indexPath.row]];

}

// 用indexPath对应的数据内容来配置cell,例如:

// cell.textLabel.text = someTextForThisCell;

// ...

// 确保cell的布局约束被设置好了,因为它可能刚刚才被创建好。

// 使用下面两行代码,前提是假设你已经在cell的updateConstraints方法中设置好了约束:

[cell setNeedsUpdateConstraints];

[cell updateConstraintsIfNeeded];

// 将cell的宽度设置为和tableView的宽度一样宽。

// 这点很重要。

// 如果cell的高度取决于table view的宽度(例如,多行的UILabel通过单词换行等方式),

// 那么这使得对于不同宽度的table view,我们都可以基于其宽度而得到cell的正确高度。

// 但是,我们不需要在-[tableView:cellForRowAtIndexPath]方法中做相同的处理,

// 因为,cell被用到table view中时,这是自动完成的。

// 也要注意,一些情况下,cell的最终宽度可能不等于table view的宽度。

// 例如当table view的右边显示了section index的时候,必须要减去这个宽度。

cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));

// 触发cell的布局过程,会基于布局约束计算所有视图的frame。

// (注意,你必须要在cell的-[layoutSubviews]方法中给多行的UILabel设置好preferredMaxLayoutWidth值;

// 或者在下面2行代码前手动设置!)

[cell setNeedsLayout];

[cell layoutIfNeeded];

// 得到cell的contentView需要的真实高度

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

// 要为cell的分割线加上额外的1pt高度。因为分隔线是被加在cell底边和contentView底边之间的。

height += 1.0f;

return height;

}

// 注意:除非行高极端变化并且你已经明显的觉察到了滚动时滚动条的“跳跃”现象,你才需要实现此方法;否则,直接用tableView的estimatedRowHeight属性即可。

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 以必需的最小计算量,返回一个实际高度数量级之内的估算行高。

// 例如:

return 200;

}

//在自定义UITableViewCell 类中 添加函数

- (void)layoutSubviews

{

[super layoutSubviews];

_remarkLab.preferredMaxLayoutWidth = self.contentView.frame.size.width - (10+40+2+34+(25+15));

_placeLab.preferredMaxLayoutWidth = _remarkLab.preferredMaxLayoutWidth;

[super layoutSubviews];

}

preferredMaxLayoutWidth的值网上的方法都是不对的,我这里用了自己的方法来实现。

时间: 2024-08-09 23:39:52

AutoLayout UITableViewCell 动态高度的相关文章

iOS开发——使用Autolayout生成动态高度的TableViewCell单元格

步骤一.TableViewCell中使用Autolayout 要点:Cell的高度必须在Constraints中指明,但不能定死,需要让内部由内容决定高度的View决定动态高度. 如UILabel设置numberOfLines为0,设置好左右约束和上下相对位置的约束后就可以让Label的内在高度尺寸约束决定Label的高,即可让系统推断出整个cell的高.   步骤二.在Controller中设置TableView的属性 要点: self.tableView.estimatedRowHeight

UITableViewcell autolayout下动态高度

项目中最经常使用的一个UI就是UITableView了.iOS7.8进一步优化了复用机制,用起来相当爽.配合Autolayout,适配工作减轻了非常多. 曾经做适配工作都是在heightForRow里边先计算出来Cell的高度.然后再CellForRow写适配代码.工作量尽管不是非常大,可是非常繁琐. 相对于这样的写法,假设减去计算height这步,工作量自然降低非常多.首先给出一种我媳妇给提供的方法,这是她做聊天UI时因为过度计算而怒创的方法,当时我看到就震惊了,之后我就一直用这种方法. f=

AutoLayout深入浅出五[UITableView动态高度]

本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的高度,这种做法,真的很土很局限很不好,如果UILabel使用了CoreText或者UIKit进行了富文本不同字体的排版,它更是没办法,我还得分段

转 使用Autolayout xib实现动态高度的TableViewCell

创建Xib文件 首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定. Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏:另一种是直接使用右键拖拽目标,在弹出的菜单中选择限制项.当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的.个人感觉后者更方便一些. 开始之前,先来介绍下使用的基本工具吧. 第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束.例如我们需要让标题和内容按照左,就选择标

AutoLayout处理UITableView动态高度

我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的高度,这种做法,真的很土很局限很不好,如果UILabel使用了CoreText或者UIKit进行了富文本不同字体的排版,它更是没办法,我还得分段来计算,总之各种麻烦. - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)si

使用Autolayout xib实现动态高度的TableViewCell

创建Xib文件 首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定. Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏:另一种是直接使用右键拖拽目标,在弹出的菜单中选择限制项.当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的.个人感觉后者更方便一些. 开始之前,先来介绍下使用的基本工具吧. 第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束.例如我们需要让标题和内容按照左,就选择标

UITableViewCell动态AutoLayout布局

相关链接: 使用Autolayout实现UITableView的Cell动态布局和高度动态改变 IOS tableView cell动态高度 (autoLayout) AutoLayoutClub

iOS-动态调整UITableViewCell的高度

OS-动态调整UITableViewCell的高度iOS开发文档, by 友盟翻译组 stefaliu. 大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的.在这篇文章中我将展示如何使图表单元格的高度能根据里面文本内容来动态改变,同时又不必子类化UITableViewCell.你当然可以通过子类化它来实现,但是这样做会使得代码复杂因为设置高度是在图表本身的实例上而不是对单元格操作.下面你将会看到这其实是一件轻而易举的事情.对于图表来说能够动态调整高度是件很

【转】UITableViewCell自适应高度 UILabel自适应高度和自动换行

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    // 列寬    CGFloat contentWidth = self.tableView.frame.size.width;    // 用何種字體進行顯示    UIFont *font = [UIFont systemFontOfSize:13];       // 該行要顯示的內容