打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
动态改变UITableView的Cell高度

动态改变UITableView的Cell高度

发布:特酷吧 | 发布时间: 2013年7月30日

一键分享到:



特酷吧[tekuba.net]采用"署名-非商业用途-保持一致"的创作共用协议,使用本文内容请遵循该协议
在IOS开发中用得最多的应该算是UITableVIew了,凭着UITableView的强大功能,使开发者可以简单的配置就能开发出很不错的效果。本次特酷吧介绍的是动态改变UITableVIew的cell高度上的问题。
我们知道,UITableVIew有一个rowHeight属性或者是在heightForRowAtIndexPath方法中都可以配置UITableVIew的cell高度。但这样设置一般都会将所有的cell统一设置了。如果我们的应用中存在不同的cell内容就会产生不同的cell高度,而这个高度是需要根据现场内容自动变化的,就不能在heightForRowAtIndexPath中简单设置。
另一方面在使用heightForRowAtIndexPath方法的过程中,如果我们在该方法中调用cellForRowAtIndexPath方法[也许你试图通过cellForRowAtIndexPath获得当前的cell,并根据该cell的内容高度来返回给heightForRowAtIndexPath方法]就会导致循环递归引发堆栈溢出,最终导致程序崩溃。产生这个问题的原因是:heightForRowAtIndexPath这个委托的调用时刻是早于cellForRowAtIndexPath的调用时刻的。而cellForRowAtIndexPath是用于返回当前的cell的。如果cell还没有返回,我们是不能在heightForRowAtIndexPath中通过cellForRowAtIndexPath获得当前cell的。如果我们偏偏这么做了,那么调用cellForRowAtIndexPath方法会触发heightForRowAtIndexPath委托方法,而heightForRowAtIndexPath又调用了cellForRowAtIndexPath,导致无限循环。
当然,我们也不是不能在heightForRowAtIndexPath中调用cellForRowAtIndexPath,只需要在调用cellForRowAtIndexPath之前将UITableVIew的delegate设置为空,等到获取到cell后再重新赋值即可。如下示例:
tableView.delegate=nil;
UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
tableView.delegate=self;
但我们这样做的意义是什么呢?
所以,以上叙述的目的就是明确:不要在heightForRowAtIndexPath方法中调用cellForRowAtIndexPath。
而如果需要动态改变UITableVIew中的cell高度,一般的做法就是再cellForRowAtIndexPath方法中根据cell内容重新绘制cell视图。
转载请注明来自特酷吧并注明本文链接,本文地址:www.tekuba.net/program/298/
IOS的多线程操作NSOperation  IOS协议与委托
IOS开发-KVO键值观察机制  IOS/mac系统使用微软雅黑等字体
IOS之Property List   IOS应用启动流程生命周期详解
IOS app应用启动图片制作 蒙特卡罗法求圆周率π(PI)
IOS摇一摇功能的实现  App应用程序提交到AppStore流程

标签:

发布:特酷吧 | 分类:编程.开源 | 引用:0 | 浏览:1721 | TrackBack引用地址
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
(转)iPhone实战:动态改变UITableView中的Cell高度
UITableView优化技巧 | iOS开发
详解Autolayout 设置UITableViewCell 高度问题
iOS 8 自适应 Cell
UITableView属性及方法大全
iOS App开发中使cell高度自适应的黑魔法详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服