UITableViewCell动态高度设置

2024-06-03 06:08

本文主要是介绍UITableViewCell动态高度设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UITableViewCell的高度在默认状态下能表现的的东西很少,而且在复用的时候由于需要展示的信息不一定,所以需要动态的调节Cell的高度来满足我们对不同内容的展示。在IOS8之前,这需要手动进行计算高度,比较麻烦。在参考许多人的博客文章后,根据IOS8的autolayout的特性,我做了一个自己的Tabelview自适应。虽然写的不如github上看到的很多功能很强大,但也算完成了一点点基本的需求。在这过程中也对autoLayout有了一个更深的印象。

首先按照上一篇文章的方法建立一个TabelView。在这里我们还需要创建一个新的自定义TabelViewCell类,这样能够方便我们对Cell进行自定义

在自定义类中,要完成以下方法

- (void)layoutSubviews
{[super layoutSubviews];[self.contentView layoutIfNeeded];self.sentence.preferredMaxLayoutWidth = CGRectGetWidth(self.sentence.frame);}

这个方法将根据设置好的约束进行布局调整

接下来是在StroyBoard中进行一些设置。最关键的部分是对不同组件之间的约束。约束做的好不好将直接影响到最后的效果。

这里写图片描述

可以看到在这个原型Cell里面定义了三个组件。我们要做的就是将三个组件和ContentView按照一定约束联系起来。
在这里,我做的是将ImageView 和Label 进行上下约束 ,button 和Label进行左右间距约束,button和ImageView之间也进行上下约束。
最后 将三者分别和ContenView进行约束.

添加约束的方法。在这里我曾经尝试通过Ctrl拖动进行约束,但是出来的效果非常奇怪。在通过网上查询后发现应该通过下图的方法

这里写图片描述

在对每个组件添加好约束以后,在TabelViewController里面有一些必须要注意的

- (void)viewDidLoad {[super viewDidLoad];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(didChangePreferredContentSize:)name:UIContentSizeCategoryDidChangeNotification object:nil];self.tableView.estimatedRowHeight = 100.0;self.tableView.rowHeight = UITableViewAutomaticDimension;}- (void)dealloc
{[[NSNotificationCenter defaultCenter] removeObserver:selfname:UIContentSizeCategoryDidChangeNotification object:nil];
}- (void)didChangePreferredContentSize:(NSNotification *)notification
{[self.tableView reloadData];
}

通过添加一个观察者,当当前的ContentSize要变化的时候,调用方法重新获取数据。

同时,注意到我们设置了一个默认的高度
self.tableView.estimatedRowHeight = 100.0;

这个是预计估算一个Cell的高度,当然我们也可以对不同类型的Cell设置不同的预设高度。

小结
对UITableViewCell的自定义是对UITableView自定义扩充的一个非常重要的点。在许多应用中都是靠扩充UITableView来展示信息。自适应高度的Cell更是非常重要。像微博,新闻等APP需要展示图文的地方非常多,通过自定义Cell就能快速的实现。在这里,对约束的认识需要非常非常好。本身的代码并不是很多,关键是去理解约束的概念。我在这里花了很多少时间参考了很多代码。只有多写多练才能更好的熟悉。

这篇关于UITableViewCell动态高度设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026187

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.