iOS8下动态改变Cell高度以及iOS8的动态类型理解

在iOS8中,苹果给出了一个激动人心的特性,UITableView 的 Self Sizing Cells。对于开发者来说,这是一个很值得一试的特性,在iOS8以前,如果需要在UITableViewCell中展示动态的内容,必须每次计算内容所占高度,然后赋值给UITableView的height。

iOS8中如何使用此特性呢?基本有三步:

  • 针对自定义Cell进行Layout Constraints设置
  • 设置estimatedRowHeight
  • 这是UITableView的RowHeight为UITableViewAutomaticDimension

后两部的代码类似这样:


tableView.estimatedRowHeight = 68.0

tableView.rowHeight = UITableViewAutomaticDimension

只有两行代码,你的UITableView就会根据内容动态展示了。这种自我调整单元的特征应为您节省代码和时间。你会爱上它。

Building a Simple Demo Using Self Sizing Cell

没有比使用一个特性更好的学习它的方法了。这里将会使用一个项目模板来学习self sizing cell。自定义cell上有两个label,分别用来展示名称和地址。你可以下载模板应用模板,来进行后面的学习,在模板中没有做任何的Constraints设置等。运行项目后如下所示:

可以看到,这个UITableViewCell 并没有更具内容动态改变高度,我们希望达到的目标就是名称和地址都可以完全的显示,Cell可以根据内容动态的改变。

Adding Auto Layout Constraints

在iOS8以前,如果要动态改变高度,需要考虑字体,行数等等一些因素,而且还不一定准确,但是在iOS8中,这些因素都可以不用考虑,动态特性会帮你做很多事情。

打开项目工程后,在IB中可以看到有一个UITableViewController,选择UITableVIew中的Name Label。设置其Constraints属性:

再次选择Address Label 设置:

完成后,如果无误,查看IB中控件:

Setting Estimated Row Height

针对AutoLayout的设置,需要在ViewDidLoad方法中,设置UITableView属性:

1 2
 tableView.estimatedRowHeight = 68.0  tableView.rowHeight = UITableViewAutomaticDimension 

如果此时运行,会发现Name Label 和 Address Label还是没自适应。原因是两个Label的Lines还是默认的1导致的,回到IB中,分别设置Name Label 和Address Label 的line属性为0:

再次运行,cell的高度已经可以根据内容来动态改变高度了。

A Bug?!

不知道是不是Bug,在应用第一次运行的时候,有些Cell并没有自动适应其内容,解决的办法就是刷新tableView:

1 2 3 4 5
 override func viewDidAppear(animated: Bool) {   tableView.reloadData()   } 

Dynamic Type

接着验证一下Self Sizing 特性,到系统设置中改变文字字体大小,然后回到应用中查看:

如果正常,你会发现UITableView的内容也跟着有变化,并且cell的高度也会随着内容变化的:

Summary

iOS8中还有很多待使用的特性,这些特性的目的就是让开发应用更加的方便快捷。往往仅需要几行代码就能实现一些iOS8以前需要大量代码的效果等。这对此介绍,完整的Demo可以点击下载:Demo下载

声明:本文内容源自AppCoda,有很多地方有自己的元素,敬请谅解。水平有限,还望勿拍砖!

时间: 2024-10-04 06:38:02

iOS8下动态改变Cell高度以及iOS8的动态类型理解的相关文章

动态改变cell的高度&beginUpdates和endUpdates-实现UITableView的动画块

1.利用reloadRowsAtIndexPaths:withRowAnimation:来动态改变cell的高度 UITableView的- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 这一方法会重新加载所指定indexPaths中的UITableViewCell实例,因为重新加载cell所以会请求这个UITableView实例的dat

05---MVC模式下动态调整Cell高度三部曲

动态调整Cell高度三部曲 我们在做项目开发的过程中经常会遇到每一个cell的高度及cell的子控件的显示个数不同,以我最近开发的微格为例,讲解一下MVC模式动态的调整Cell宽高的三部曲 1>.自定义Cell,重写- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法 在此方法中添加所有的可能显示的子控件 子控件的frame通过构建的cellFrame模型进行设置

UITableView使用AutoLayout动态计算cell高度

UITableView几乎是每个app都需要用的控件,而cell高度自适应也是我们 需要掌握的,当然cell上面的控件也是有多种表现形式,今天小编讲解的是其中一种比较常见的:Auto Layout with UILabel in UITableViewCell. 话不多说,上教程. 首先我们创建一个Sigle View Application的项目,然后拖上一个UITableView到storyboard中,设置好代理并且设置好约束.约束这里就不做讲解了,可以到AutoLayout详解了 解一下

iOS8下tableView的cell下划线不能从0开始的问题

判断当前设备的系统信息 #define isIOS8 ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"8"]) iOS8下用下面的方法 - (void)setInset:(UITableView *)view cell:(UITableViewCell *)cell { if (view !=nil) { if ([view respondsToSelector:@selector(setSeparatorInset:)])

关于Xib使用AutoLayout动态设置cell高度

最近又要做新功能了,虽然没有什么难点,只是获取后端XML数据显示到TableView,但是不是可以更简单快速的完成呢?原来Cell的动态高度一直都是通过sizeWithFont手动计算,潜意识觉得这应该不是最好的实现方式,但由于当时时间紧不允许尝试新技术,所以问题也就遗留了下来,这次又遇到了,时间充裕就解决下吧. Autolayout是解决自适应frame问题的解决方案(iOS6.0就已经支持了,我现在才用= =#).通过给视图元素设置合适的约束条件,内部会根据元素内容和限制条件计算出合适的尺寸

iOS 动态计算cell高度实用API

// Use the estimatedHeight methods to quickly calcuate guessed values which will allow for fast load times of the table. // If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be display

H5特性 MutationObserver 监听元素 动态改变iframe高度

这些代码要写在iframe页中执行 <script type="text/javascript"> $(function () { // Firefox和Chrome早期版本中带有前缀 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver // 选择目标节点 var target = document.body

转:动态计算UITableViewCell高度详解

转自:http://www.cocoachina.com/industry/20140604/8668.html 不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件.今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一些总结方便朋友们查阅.为了不让讲解空洞抽象,我还是用代码实例的方式进行讲解,这样更容易接收与学习. 本文将介绍四种情况下UITableViewCell的计

动态计算UITableViewCell高度详解 (转)

感觉挺有用的一篇文章,分析了4种解决方案.回头测试之.如果有别的方案,我会在后面补上. 原文地址:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan-uitableviewcellgao-du-xiang-jie/ 不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件.今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一