文档章节

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

hejunbinlan
 hejunbinlan
发布于 2015/06/24 15:33
字数 839
阅读 2.8K
收藏 5

「深度学习福利」大神带你进阶工程师,立即查看>>>

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

hejunbinlan
粉丝 41
博文 595
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.7K
0
【opencv】图形的绘制

1.矩形图像的绘制: 原函数:void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8,int shift=0) img就是需要绘制的图像 pt1 and pt......

其实我是兔子
2014/10/08
1.2K
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7

没有更多内容

加载失败,请刷新页面

加载更多

您如何加速Eclipse? - How can you speed up Eclipse?

问题: How can you make the experience with Eclipse faster? 如何使Eclipse体验更快? For instance: I disable all the plugins I don't need (Mylyn, Subclipse, …). 例如: 我禁用了所......

fyin1314
28分钟前
9
0
百度地图SDK新版内测邀请

本文作者:用****9 百度地图开放平台为开发者提供七大基础服务能力,其中地图SDK和导航SDK是开发者广泛使用的重要基础服务,为了满足开发者更多使用需求以及提升开发者集成后的应用效果,本次...

百度开发者中心
前天
27
0
获取JavaScript数组中的所有唯一值(删除重复项) - Get all unique values in a JavaScript array (remove duplicates)

问题: I have an array of numbers that I need to make sure are unique. 我需要确定一个唯一的数字数组。 I found the code snippet below on the internet and it works great until th......

javail
今天
11
0
如何检查字符串是否为空? - How to check if the string is empty?

问题: Does Python have something like an empty string variable where you can do: Python是否有类似空字符串变量的内容可以在其中执行: if myString == string.empty: Regardless, wh......

富含淀粉
今天
27
0
您如何存储未跟踪的文件? - How do you stash an untracked file?

问题: I have changes to a file, plus a new file, and would like to use git stash to put them away while I switch to another task. 我对一个文件进行了更改,再加上一个新文件,并希......

技术盛宴
今天
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部