文档章节

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

hejunbinlan
 hejunbinlan
发布于 2015/06/24 15:33
字数 839
阅读 2641
收藏 5
点赞 0
评论 0

在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就会根据内容动态展示了。这种自我调整单元的特征应为您节省代码和时间。你会爱上它。

self-sizing-cell-featured

Building a Simple Demo Using Self Sizing Cell

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

table-view-truncated-text

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

Adding Auto Layout Constraints

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

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

self-sizing-cell-auto-layout-1

再次选择Address Label 设置:

self-sizing-cell-auto-layout-2

完成后,如果无误,查看IB中控件:
self-sizing-cell-constraint-1
self-sizing-cell-constraint-2

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:

self-sizing-numofline

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

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,有很多地方有自己的元素,敬请谅解。水平有限,还望勿拍砖!

本文转载自:http://robinchao.github.io/blog/2014/12/29/selfsizingcell/

共有 人打赏支持
hejunbinlan
粉丝 40
博文 532
码字总数 21018
作品 0
浦东
高级程序员
IOS 6.0+ Autolayout — UITableViewCell 高度调整

要实现的效果 要求: 一般titleLabel 仅显示一行标题,高度为固定。 imageview 大小也为固定。 detailLabel 宽度固定,但高度根据文本动态调整。 cell 底部拒imageview 的底部以及detailLab...

Carson6931 ⋅ 2015/01/03 ⋅ 15

使用Autolayout实现UITableView的Cell动态布局和高度动态改变

本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并且能够保持平滑滚动的? 这个问题得到了3...

hejunbinlan ⋅ 2015/06/24 ⋅ 0

使用Autolayout实现UITableView的Cell动态布局和高度动态改变

使用Autolayout实现UITableView的Cell动态布局和高度动态改变 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并且能够保持平滑滚动的? 这个问题得到了3...

法斗斗 ⋅ 2015/10/14 ⋅ 0

优化UITableViewCell高度计算的那些事

我是前言 这篇文章是我和我们团队最近对 UITableViewCell 利用 AutoLayout 自动高度计算和 UITableView 滑动优化的一个总结。 我们也在维护一个开源的扩展,UITableView+FDTemplateLayoutCel...

SunGiantor ⋅ 2015/05/21 ⋅ 2

iOS AutoLayout进阶(五)UITableViewCell自动高度

前言 前面几个章节详细介绍了Aspect Ratio、Content Hugging Priority(抗拉伸优先级)和Content Compression Resistance Priority(抗压缩优先级), 本文将综合运用这些特性,在不计算UITableVi...

朱晓辉 ⋅ 2017/11/27 ⋅ 0

UITableView自动计算cell高度并缓存(Xib)

这篇文章我们来讲一下UITableView的cell自适应高度,以及遇到的问题的解决办法。在看文章之前希望你已经会UITableView的基本使用了。 先奉上这篇文章的demo的Github地址:UITableViewCellHe...

秦无炎 ⋅ 2016/11/16 ⋅ 0

AutoLayout(Ⅱ):遇到的几个小问题(Keng)

团队采用AutoLayout已经有小半年的时间了,基本上已经非常熟练的运用这个技术,其实搞几天搞会了也就没啥了。 总结一些常用的情况和遇到的几个小问题,顺便给刚用这个技术的童鞋一个参考。 ...

hejunbinlan ⋅ 2016/07/29 ⋅ 0

iOS7版本差异(不定期更新)

前言 IOS7即将面临淘汰,但是不得不说很多应用还在适配IOS7,下面就是我在项目开发过程中遇到的一些系统版本的差异,会不定期更新; (一)button的state; 在一般情况下,看不出来这个state...

麦兜卖鱼丸 ⋅ 2015/11/18 ⋅ 0

Framework打包前传

关于库的一些基础知识 首先来了解一下什么是库:库(Library)其实是一段编译好的二进制代码,然后将头文件暴露出来(OC中就是.h文件,swift中打包后Xcode将会自动生成.h文件 需要将Swift代码前...

樗同学 ⋅ 2016/09/27 ⋅ 0

表格视图嵌套WKWebView高度自适应

前言 Important Starting in iOS 8.0 and OS X 10.10, use WKWebView to add web content to your app. Do not use UIWebView or WebView. WKWebVIew是iOS8新出的API,旨在替代原有的UIWebVi......

WB_小文 ⋅ 2017/11/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 29分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 40分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 49分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 49分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 今天 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 今天 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部