首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义tableviewcell动态高度不会根据约束进行更新(具有编程自动布局功能)

自定义tableViewCell动态高度不会根据约束进行更新是因为在使用自动布局时,需要正确设置约束以确保cell的高度可以根据内容自动调整。

解决这个问题的方法是:

  1. 确保tableView的rowHeight属性设置为UITableViewAutomaticDimension,这样tableView会自动计算cell的高度。
  2. 在自定义的tableViewCell中,使用Auto Layout来设置cell内部视图的约束。
  3. 确保cell内部的视图与cell的顶部、底部、左侧和右侧都有正确的约束关系,以便自动布局可以正确计算cell的高度。
  4. 在tableView的代理方法中,实现heightForRowAt方法,返回UITableViewAutomaticDimension,告诉tableView使用自动计算的高度。

以下是一个示例代码:

代码语言:txt
复制
class CustomTableViewCell: UITableViewCell {
    @IBOutlet weak var label: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // 设置label的行数为0,以支持多行文本
        label.numberOfLines = 0
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        // 更新label的preferredMaxLayoutWidth,确保自动布局可以正确计算label的高度
        label.preferredMaxLayoutWidth = label.frame.size.width
    }
}

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置tableView的rowHeight为UITableViewAutomaticDimension
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 44 // 设置一个估算的行高,可以提高性能
        
        // 注册自定义的tableViewCell
        tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
    }
    
    // UITableViewDataSource方法
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10 // 假设有10个cell
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell
        cell.label.text = "这是一段很长的文本,可能会换行,需要根据内容自动调整cell的高度。"
        return cell
    }
    
    // UITableViewDelegate方法
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
}

在这个示例中,我们创建了一个自定义的tableViewCell,其中包含一个UILabel来显示文本内容。在awakeFromNib方法中,我们将UILabel的行数设置为0,以支持多行文本。在layoutSubviews方法中,我们更新UILabel的preferredMaxLayoutWidth,确保自动布局可以正确计算UILabel的高度。在tableView的代理方法中,我们设置rowHeight为UITableViewAutomaticDimension,并实现heightForRowAt方法返回UITableViewAutomaticDimension。

这样,当tableView加载时,会根据UILabel的内容自动计算cell的高度,并根据约束进行更新。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发中行高灵活可变的UITableView的性能优化

TableViewCell配置部分: ④当使用cellID进行与TableView绑定的cell获取时会拉取本行cell的高度数据。 ?...⑤当cell进行layoutSubViews方法进行布局时会再次拉取本行cell的高度数据。 ?...TableViewCell配置部分,只有当cell将要出现在屏幕上时才会出现,并且只拉取当前行的行高,这两种场景会在用户滑动TableView时不断被执行,并且根据UITableView的布局cell原理...下册会受到内容Label施加的压力,这时cell也会根据约束自动扩充自己的高度。...,系统会自动根据标题是否存在来进行自适应,举个例子,如果返回的标题为nil,则头视图会被自动隐藏,示例代码如下: -(CGFloat)tableView:(UITableView *)tableView

1.9K20

iOS-UI控件之UITableView(三)- 自定义不等高的cell

Storyboard_不等高 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView之间的间距约束 设置tableViewCell的真实行高和估算行高...// 告诉tableView所有cell的真实高度自动计算(根据设置的约束来计算) self.tableView.rowHeight = UITableViewAutomaticDimension...; // 告诉tableView所有cell的估算高度 self.tableView.estimatedRowHeight = 44; 改变cell高度,只需要改变约束的值。...:(NSIndexPath *)indexPath { // 创建一个cell(cell的作用:根据模型数据布局所有的子控件,进而计算出cell的高度) if (!...cell内部的所有子控件(label根据文字多少计算出自己最真实的尺寸) [self layoutIfNeeded]; // 计算cell的高度 if (self.status.picture

866100

iOS中Cell约束--使用xib实现多label的自动约束--高度随内容自适应

本文的主题是--tableViewCell高度自适应,计算cell高度的方法确实有好几种,因为做cell的时候,比较简单的界面我都是直接拉xib,手动连接约束比较省事,所以今天就来探索一波-- 使用xib...所以并不会换行 xib的约束展示 如图,我们知道label只要设置两条约束,宽和高都可以自动实现内容的自适应,但是,这里如果不设置宽(添加右侧约束 == 确定 宽),label的宽会无限大,无限跑到内容的外部去...添加右侧约束 约束报错 如图,添加完右侧约束之后,我们发现约束报错了,原因:两个label都没设置宽度,都是根据内容自动设定的,这样就会导致均无法确定两个的frame,所有约束报错 ---- -->小...根据keyLabel的内容计算宽度 通过内容,计算keyLabel的宽度,同时设置到keyLabel的宽度约束上,更新约束; 随后,valueView由于自适应,其宽度就自动 = 屏幕宽度 - keyLabel...修改完的展示 此时,label相互之间的约束冲突就解决了~ ---- 接下去,就是设置tableViewCell高度自适应的问题了; xib的快捷设置方法:1.在xib中,设置 顶部 和 底部 约束之后

3.4K60

android

但如果在项目中根据不同屏幕尺寸进行各种判断,写死坐标的话,这样开发起来是很吃力的。 所以一般用纯代码开发UI的话,一般都是配合一些自动布局的框架进行屏幕适配。...什么是Masonry Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。...在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...实现方式: 需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。...我这里就讲一下两种进行UIScrollView自动布局的方案,并且会讲一下自动布局的技巧,只要掌握技巧,布局其实很简单。

72520

iOS自动布局框架之Masonry

但如果在项目中根据不同屏幕尺寸进行各种判断,写死坐标的话,这样开发起来是很吃力的。所以一般用纯代码开发UI的话,一般都是配合一些自动布局的框架进行屏幕适配。...Masonry简介 Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。...在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...调用此方法,如果有标记为需要重新布局约束,则立即进行重新布局,内部会调用updateConstraints方法 - (void)updateConstraints 重写此方法,内部实现自定义布局过程...需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。

1.1K60

iOS自动布局框架之Masonry

但如果在项目中根据不同屏幕尺寸进行各种判断,写死坐标的话,这样开发起来是很吃力的。所以一般用纯代码开发UI的话,一般都是配合一些自动布局的框架进行屏幕适配。...Masonry简介 Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。...在项目中设置的AutoLayout约束,起到对视图布局的标记作用。设置好约束之后,程序运行过程中创建视图时,会根据设置好的约束计算frame,并渲染到视图上。...调用此方法,如果有标记为需要重新布局约束,则立即进行重新布局,内部会调用updateConstraints方法 - (void)updateConstraints 重写此方法,内部实现自定义布局过程...需要设置tableView的rowHeight属性,这里设置为自动高度,告诉系统Cell的高度是不固定的,需要系统帮我们进行计算。

2K50

【死磕iOS】处理不等高TableViewCell的小花招

直接法,就是把数据布局到Cell上,然后拿到Cell最底部控件的MaxY值。...第一步:创建Cell并正确设置约束,使文字区域高度能够根据文字内容多少自动调整 第二步:再给这个Cell添加点别的东东,就叫这个东东BottomCub了。为Cub添加好约束。...自己来算算看~ 通常情况下,Cell之所以不等高,是因为Cell内部文字区域的高度根据文字数量动态变化,图片区域的高度根据图片数量而自动变化。...string in self.testTitleArray) { CGFloat cellHeight = 0; // 一个Cell由两部分组成 - 高度自动调整的...方案一:在heightForRow代理方法中计算 示例代码:见课题一方案一 说明:在这里进行计算是非常糟糕的选择,因为系统调用heightForRow方法非常频繁 感兴趣的小伙伴可以打印测试下…在这里进行计算

1.3K80

用这些 iOS 技巧让你的 APP 性能更佳

除此之外,每个 tableViewCell 在滚动期间都需要分配新内存。如果你快速滚动表视图,期间会动态分配许多小块内存,这个过程将使 UI 变得卡顿!...通过将屏幕上不再可见的 tableViewCell 放入队列中进行复用,并且当新 tableViewCell即将在屏幕上可见时(例如,当用户向下滚动时,下面的后续tableViewCell),表视图将从此队列中检索...当应用程序加载视图控制器和布局时,将向用户显示此页面。...如果你尝试使用任何其他自定义子类(例如 UserViewController),Xcode 将提示你禁止使用自定义类名。 ? 启动页 storyboard不能包含非 UIKit 标准类。...推荐阅读: 具有面部识别功能的移动应用程序:如何实现 01 视图控制器的状态恢复 视图控制器的状态保存和恢复,允许用户在离开应用程序后可以返回到之前完全相同的用户界面状态。

3.2K30

Ios常用第三方框架(一)

AutoLayout Masonry - Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性(使用介绍1使用介绍2),iOS自适应前段库...Auto-Layout-Showcase - swift,AutoLayout 进阶 Demo,宽高比约束、比例约束、不等约束、视差约束、低优先级约束等高级用法,无需写码即可进行复杂页面布局,Demo...SDAutoLayout - AutoLayout 一行代码搞定自动布局!支持Cell、Label和Tableview高度自适应,致力于做最简单易用的AutoLayout库。...Neon.swift - 功能强大的 UI 布局神器。 EasyPeasy.swift - 编程方式自动布局框架库。...HPGrowingTextView - HPGrowingTextView聊天输入文字,可以根据输入文字的多少自动改变输入框的高度

5.4K31

最新iOS设计规范七|10大视觉规范(Visual Design)

自动布局 自动布局(Auto Layout)是一种构建自适应接口的开发工具。使用“自动布局”,你就可以定义控制APP中内容的规则(称为约束)。...例如:无论可用的屏幕空间多大,你都可以约束一个按钮,使其始终水平居中并定位在距离图像下方8pt的位置。 当检测到某些环境变化(称为特征)时,自动布局根据指定的约束自动调整布局。...视图可能包含尺寸类型的任意组合: 常规宽度,常规高度 紧凑宽度,紧凑高度 常规宽度,紧凑高度 紧凑宽度,常规高度 iOS会根据内容区域的尺寸类型动态进行布局调整。...注意状态栏的高度。全屏iPhone型号的状态栏比其他型号高。如果你的APP采用固定的状态栏高度将内容定位在状态栏下方,则必须更新APP以便于根据用户的设备来动态的定位内容。...确保自定义字体清晰易读。 实现自定义字体的辅助功能根据需要在界面模型中调整跟踪。 动态类型大小 动态类型使读者可以选择自己喜欢的文本大小,从而提供了更大的灵活性。

8K30

史上最全的iOS之访问自定义cell的textField.text的N种方法

前言 问题背景:自定义cell中有一个UITextField类型的子控件。我们经常要在tableView中拿到某个cell内textField的文本内容进行一些操作。...内容进行重新配置或者清空(根据自己的业务场景而定) 以下是方法二的demo地址 方法三(发送自定义通知) 其实方法三和方法二很像,都需要给自定义的textField添加indexPath属性,也需要发送通知...内容进行重新配置或者清空(根据自己的业务场景而定) 以下是方法三的demo地址 方法三相对于方法二的好处在于:方法三发送的是自定义通知,而方法二发送的是系统自带的通知。...内容进行重新配置或者清空(根据自己的业务场景而定) customCell.contentTextField.text = [NSString stringWithFormat:@"第%ld...内容进行重新配置或者清空(根据自己的业务场景而定) 以下是方法四的demo地址 方法四相对于方法二和方法三的好处在于:方法四没有采用通知的方式来获取contentTextField.text,而是采用灵活的

6.8K40

iOS开发遇到的一些小问题记录

1. tableView下方出现莫名的空白 tableFooterView问题 一般来说,tableview会默认有一个footerview 解决:在视图加载时将这个footerview设为没有高度或者是空...view就可以 tableView.footerView = UIView() tableView.footerView.height = 0 contentSize自动计算问题 tableView会有一个自动计算...contentSize的功能 即我们改变dataSource里的数据刷新视图的时候,tableview的总高度是被改变的,而这时自动计算出来的,不像scrollview是需要手动指定的。...改成用 UIButton Action的方式有效,仔细搜索并分析发现问题主要是 在viewdidload周期内的segue会被最后更新的UI视图覆盖掉、也就是当前页面的主视图。所以看不出效果。...动态切换tableViewCell类型/模板时没有反应 需要在切换tableViewCell类型之前先定义好style 否则会没有效果

79710

开源UI界面布局框架MyLayout1.9发布

MyLayout是一套功能全面的iOS开源UI界面布局框架。它囊括了前端所有流行的界面布局技术和解决方案,同时具有如下七大特点: 功能强大。...MyLayout还支持从服务器进行动态布局下发的能力。 系统结合紧密。...有些布局类则可以实现一些特殊排列,比如路径布局可以根据提供的数学函数来实现视图根据特定路径曲线来进行排列展示。有些布局类则可以提供从服务器进行动态下发以及用JSON进行布局描述的能力,比如栅格布局。...默认值是0表示会根据条目的尺寸自动进行换行。 */ -(id (^)(NSInteger))item_size; /** 指定布局视图中每页的条目数量。...*/ -(id (^)(NSInteger))page_size; /** 指定布局根据条目的尺寸自动排列,默认值是NO。

1.7K10

你可能需要为你的 APP 适配 iOS11

本文内容包括:集成了搜索的大标题栏、横向选项卡栏、Margins 和 Insets以及 UIScrollView和UITableView 的更新功能更强大的滑动操作。...做了新的自动布局扩展支持,自定义的bar button items、自定义的title都可以通过layout来表示尺寸。...需要注意的是,你的constraints需要在view内部设置,所以如果你有一个自定义的标题视图,你需要确保任何约束只依赖于标题视图及其任何子视图。当你使用自动布局,系统假设你知道你在做什么。...6、Avoiding Zero-Sized Custom Views 自定义视图的size为0是因为你有一些模糊的约束布局。...; ③ 通过约束关联你的子视图; 二、管理margins 和 insets 1、layout margins 基于约束的Auto Layout,使我们搭建能够动态响应内部和外部变化的用户界面。

2.4K00

30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

另外,Text Mesh 还支持动态生成文本,可以通过代码来实现动态更新文本内容,从而满足游戏中各种动态文本渲染需求。...Audio Source还支持动态更新,可以在运行时更改音频文件、音量、音调等属性。这使得开发者可以根据游戏的需求实时调整音效,以增强游戏的体验效果。...子布局元素的高度根据以下规则由各自的最小高度、偏好高度和灵活高度决定: 所有子布局元素的最小高度相加,并加上它们之间的间距。得到的结果便是垂直布局组的最小高度。...所有子布局元素的偏好高度相加,并加上它们之间的间距。得到的结果便是垂直布局组的偏好高度。 如果垂直布局组处于其最小高度或更小值,则所有子布局元素也将具有最小高度。...垂直布局组越接近其偏好高度,每个子布局元素也越接近偏好高度。 如果垂直布局高度大于其偏好高度,则会根据各子布局元素的灵活高度按比例为子布局元素分配额外的可用空间。

2.3K34

【最新】iPhone X 交互设计官方指南

请参阅 图像大小和分辨率 和 自定义图标。 布局 在对 iPhone X 中的应用进行设计时,你必须确保布局能够填满屏幕,并且保证他们不会被设备的圆角、传感器外壳或者用于访问主屏幕的指示灯遮盖。 ?...如果你的的应用程序具有自定义布局,那么支持 iPhone X 也应该比较容易。如果你的应用程序使用 Auto Layout 并且遵守安全区域和边距布局指南的话。...所有的应用程序都应遵循 UIKit 中定义的安全区域和布局边距,这些区域可以根据设备和上下文进行适当的填充。安全区域还能够防止内容把状态栏、导航栏、工具栏和标签栏覆盖掉。 注意状态栏的高度。...如果你的应用程序的状态栏高度比默认状态栏高,那么你必须更新自己的应用程序,这样才能动态根据用户设备定位内容。...但是请注意,当背景任务(例如录音和位置跟踪)处于活动状态时,iPhoneX 上的状态栏并不会改变高度。 如果你的应用程序对隐藏状态栏进行了隐藏,那么请重新考虑在 iPhone X 上的设计。

1.9K20

iOS开发常用之UI模糊效果、自动版式

自动版式 Masonry - Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性(使用介绍1 使用介绍2),iOS自适应前段库-Masonry...Auto-Layout-Showcase - swift,AutoLayout进阶演示,宽高比约束,比例约束,不等约束,视差约束,低优先级约束等高级用法,无需写码即可进行复杂页面布局,Demo还动态模拟了各屏幕下的效果...UIView-FDCollapsibleConstraints - 一个AutoLayout辅助工具,最优雅的方式解决自动布局中子查看的动态显示和隐藏的问题。...SDAutoLayout - AutoLayout一行代码搞定自动布局!支持Cell,Label和Tableview高度自适应,致力于做最简单易用的AutoLayout库。...Neon.swift - 功能强大的UI布局神器。 EasyPeasy.swift - 编程方式自动布局框架库。

1.6K30

有赞移动消息卡片动态化方案实践

动态化技术指不依赖 APP 发版,就能进行动态的增加或者修改来更新页面的技术。对于消息卡片这种需要快速迭代、实时调整的业务,动态具有非常重要的意义。...消息原生架构图 方案 关于动态化技术栈的选择 上面介绍了 iOS 端消息卡片渲染架构设计,那么为了让消息卡片具有动态化的能力,但是不会打乱现有原生架构的情况下,我们采用了结合 weex 技术栈来做这件事...鉴于这样的设计目标,在这个框架里,主要考虑以下方面: 在不改变原有原生架构的基础上去做消息卡片动态化 页面布局动态化,意思是页面的排版布局,可以通过 weex 端和 JS 端发布来达到动态更新 组件的复用...,为了在多种类型的卡片中保持良好的性能,需要对 weex 端容器进行缓存和复用 开发、构建、发布整个流程需要拥有一个完善的平台 JS 动态库 JS 动态库是我们团队出的一个动态化方案的框架,主要功能是提供动态下发的能力...卡片所在的 cell 的宽高,入参是消息卡片内容和消息类型,JS 将卡片内容解析出来,进行高度、宽度的计算返回给原生。

1.1K20

TableView优化之高度缓存

---- 这篇博客中你可能会用到 category 、subclass、protocol之间的区别 自动布局相关 runTime动态绑定 tableViewCell重用的相关 恩,其实东西并不多,重要的还是一个思想...这样的话每个不同种类的cell上的子视图是不相同的,在自动计算高度的时候对cell的布局有很高要求,所以我们一定要保证我们计算用的cell与展示用的cell是同一种cell。...事实上,有两种自动布局方式,autoResizing和autoLayout。 autoResizing是UIView的固有属性。是在IOS6之前用来实现自动布局的属性。...1.先拿到cell的宽度 2.根据辅助视图样式校正宽度 如果有自定义辅助视图,则按照自定义辅助视图的宽度去校正,如果没有按照系统辅助视图样式去校正宽度,然后根据宽度计算高度。...这里是添加约束的写法,先添加一个宽度约束,然后让系统根据宽度约束自动计算高度,接着去掉我们添加的约束。 4.如果根据约束计算结果错误,则以sizeThatFits去计算高度

2.4K30

你可能需要为你的APP适配iOS11

本文内容包括:集成了搜索的大标题栏、横向选项卡栏、Margins 和 Insets以及 UIScrollView和UITableView 的更新功能更强大的滑动操作。...UIToolbar and UINavigationBar— Layout 在 iOS 11 中,当苹果进行所有这些新特性时,也进行了其他的优化,针对 UIToolbar 和 UINavigaBar 做了新的自动布局扩展支持...需要注意的是,你的constraints需要在view内部设置,所以如果你有一个自定义的标题视图,你需要确保任何约束只依赖于标题视图及其任何子视图。当你使用自动布局,系统假设你知道你在做什么。...Avoiding Zero-Sized Custom Views 自定义视图的size为0是因为你有一些模糊的约束布局。...; ③ 通过约束关联你的子视图; 二 管理margins 和 insets layout margins 基于约束的Auto Layout,使我们搭建能够动态响应内部和外部变化的用户界面。

81520
领券