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

我的TableViewCell不会根据它内部动态变化的视图来改变高度

TableViewCell是iOS开发中用于展示列表数据的一种视图控件。通常情况下,TableViewCell的高度是固定的,但是当内部的视图动态变化时,需要根据内部视图的内容来动态调整TableViewCell的高度。

为了实现TableViewCell的高度根据内部视图动态变化,可以采用以下步骤:

  1. 在TableViewCell的布局中,将内部视图的约束设置为自适应的约束。这意味着内部视图的高度会根据其内容自动调整。
  2. 在TableViewCell的代码中,重写layoutSubviews方法。在该方法中,调用super.layoutSubviews()来确保父类的布局方法得到执行。然后,更新内部视图的约束,并计算内部视图的高度。
  3. 在TableView的代理方法heightForRowAt中,返回计算得到的TableViewCell的高度。可以使用systemLayoutSizeFitting方法来计算TableViewCell的高度,该方法会根据内部视图的约束自动计算高度。

以下是一个示例代码:

代码语言:txt
复制
class CustomTableViewCell: UITableViewCell {
    // 内部视图
    var dynamicView: UIView!
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        // 创建内部视图
        dynamicView = UIView()
        dynamicView.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(dynamicView)
        
        // 添加内部视图的约束
        dynamicView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10).isActive = true
        dynamicView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -10).isActive = true
        dynamicView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10).isActive = true
        dynamicView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10).isActive = true
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        // 更新内部视图的约束
        // ...
        
        // 计算内部视图的高度
        let dynamicViewHeight = dynamicView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        
        // 更新TableViewCell的高度
        frame.size.height = dynamicViewHeight + 20
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

// 在TableView的代理方法中返回计算得到的TableViewCell的高度
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell
    // 配置TableViewCell的数据
    // ...
    cell.layoutIfNeeded()
    return cell.frame.height
}

这样,当内部视图的内容发生变化时,TableViewCell的高度会自动根据内部视图的大小进行调整。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

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

并且,每次拉取高度都从代理方法拉取,而不是存入内部一个变量属性中,避免了因为数据源更改时机巧合而产生界面与预期不一致风险。...个人更倾向将行高数据封装进cell数据模型Model中。         通过优化,可以有效减少重复高度计算,这也是原先处理此类问题主要方式。...在开发中通常会遇到一些十分复杂界面,而这些界面中cell高度都是需要通过请求到数据动态改变,每个cell都要写复杂尺寸计算代码十分令人心烦。...这个值设置之后,开发者无需设置rowHeight属性,也不需要实现heightForRowAtIndexPath方法,系统会自动根据UITableViewCell中contentView约束计算自己行高...是一个CGFloat类型常量,其需要和用来处理返回头尾视图标题方法结合使用,用它来作为TableView分区头尾视图高度返回,系统会自动根据标题是否存在进行自适应,举个例子,如果返回标题为nil

1.9K20

【IOS开发基础系列】Storyboard专题

运行程序,什么都没有改变。不要奇怪,我们还没有提供数据源,因此表视图不会显示任何行。 2.3.3 创建PlayersViewController         加一个新 File 到项目中。...默认 label 将消失。         首先增加 cell 高度为55 像素。拖拽下端拉柄可以改变高度,也可以修改Size 面板中Row height 值。             ...设置Mode 为 Center(在属性面板 View 下面)以便当我们将图片放入时它不会被拉伸。         将俩个 label 宽度设置为210,这样不会遮住ImageView。...真的喜欢使用模板cell,使TableView 代码看起来整洁多了。         ...其次,你应当确保添加内容能自动适应单元格尺寸变化。例如,当你需要表格行能够被删除或移动时 ,Cell 尺寸会发生改变

98530

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

1. tableView下方出现莫名空白 tableFooterView问题 一般来说,tableview会默认有一个footerview 解决:在视图加载时将这个footerview设为没有高度或者是空...即我们改变dataSource里数据刷新视图时候,tableview高度是被改变,而这时自动计算出来,不像scrollview是需要手动指定。...改成用 UIButton Action方式有效,仔细搜索并分析发现问题主要是 在viewdidload周期内segue会被最后更新UI视图覆盖掉、也就是当前页面的主视图。所以看不出效果。...IAP 重复回调问题 在测试iap支付时候,发现每次请求都会打印出两次一样消息,后检查出重复添加了SKPaymentQueue侦听 另外尽量不要分散在各个地方写侦听,因为不会报错 5....动态切换tableViewCell类型/模板时没有反应 需要在切换tableViewCell类型之前先定义好style 否则会没有效果

79810

史上最全iOS之访问自定义celltextField.textN种方法

以下将要分四个方法分别介绍并逐一介绍他们优缺点,大家可以在开发中根据实际情况有选择采用不同方法。...我们这次给textFieldindexPath赋值而不是tag。这样就可以在监听到通知后调用方法中,根据indexPath区分不同section和row。...// 想实时监听textField内容变化,你也可以注册这个通知:UITextFieldTextDidChangeNotification,textField值改变就会发送通知。...,导致频繁调用监听到通知方法,而这些通知是这个界面不需要,所以在视图将要消失时候移除通知 同样,在视图将要显示时候注册通知 [[NSNotificationCenter defaultCenter...内容进行重新配置或者清空(根据自己业务场景而定) 以下是方法四demo地址 方法四相对于方法二和方法三好处在于:方法四没有采用通知方式获取contentTextField.text,而是采用灵活

6.8K40

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

,说到这里,今天男一号-tableViewCell就要登场了。      ...本文主题是--tableViewCell高度自适应,计算cell高度方法确实有好几种,因为做cell时候,比较简单界面都是直接拉xib,手动连接约束比较省事,所以今天就来探索一波-- 使用xib...首先:改变tableViewCell高度  其次:设置内容行数_valueLabel.numberOfLines=0; 如图,发现内容还是越界了 怀疑:内容label宽度 = 无穷大?...宽度,不需要我们再次设置; 展示内容如上 此时我们发现,有部分内容,还是被遮住了,label并不会完全显示出所有的内容 修改:label宽度稍微加一点 发生这种情况,是由于Xcode8.0之后,字体长度计算有了些许改变...修改完展示 此时,label相互之间约束冲突就解决了~ ---- 接下去,就是设置tableViewCell高度自适应问题了; xib快捷设置方法:1.在xib中,设置 顶部 和 底部 约束之后

3.4K60

一文彻底搞清楚 Material Design

Z 属性会扩大 View 显示区域(主要是控件本身大小+阴影),如果大小大于或者等于父视图大小,那么阴影效果就无法显示了,view 并不会因为 z 属性而缩小自身去显示阴影。...某些类型组件具有响应式海拔高度,会根据用户输入(例如 正常状态、获取焦点、按下)和系统事件改变自身海拔。这些海拔高度改变通常是通过动态海拔高度偏移来实现。...值后大小做轮廓 paddedBounds 和bounds类似,不过阴影会稍微向右偏移一点 如果我们想创建一个自定义视图,并动态地去改变轮廓,这个时候需要使用 ViewOutlineProvider...物质材料内部可以展示任何形状和颜色,但其内容不会增加材料厚度。...但是设置最好不需要这样,用 Button 自身阴影效果就可以了,阴影会根据 Button 在页面中位置不同阴影还不同。

2.3K10

你可能需要为你 APP 适配 iOS11

; ③ 通过约束关联你视图; 二、管理margins 和 insets 1、layout margins 基于约束Auto Layout,使我们搭建能够动态响应内部和外部变化用户界面。...提供两种方式:safeAreaInsets或safeAreaLayoutGuide提供给你safeArea参照值,即 insets 或者 layout guide。...改变safeAreaInsets值,当你viewController改变safeAreaInsets值时,有两种方式获取到回调: 三、UIScrollView and UITableView...因为不会缓存正确行高,tableView reloadData时候,会重新计算contentSize,就有可能会引起contentOffset变化。...写demo测试时候,因为每个cell高度都较小,所以只显示image,然后增加cell高度后,就可以同时显示image和title了。

2.4K00

你可能需要为你APP适配iOS11

; ③ 通过约束关联你视图; 二 管理margins 和 insets layout margins 基于约束Auto Layout,使我们搭建能够动态响应内部和外部变化用户界面。...提供两种方式:safeAreaInsets或safeAreaLayoutGuide提供给你safeArea参照值,即 insets 或者 layout guide。...改变safeAreaInsets值,当你viewController改变safeAreaInsets值时,有两种方式获取到回调: 三 UIScrollView and UITableView...因为不会缓存正确行高,tableView reloadData时候,会重新计算contentSize,就有可能会引起contentOffset变化。...写demo测试时候,因为每个cell高度都较小,所以只显示image,然后增加cell高度后,就可以同时显示image和title了。

81520

在 SwiftUI 中用 Text 实现图文混排

以标注尺寸为准 ),图片尺寸并不会随字体尺寸大小变化变化。...从上图中可以看出,动态类型仅对文本有效,Text 中图片尺寸并不会发生改变。在使用 Text 实现图文混排时,如果图片不能伴随文本尺寸变化变化,就会出现上图中结果。...Text 中添加 Image 进行图文混排,需要考虑如何处理动态类型变化问题( 不可能预生成如此多尺寸图片 )是否可以不通过预制标签图片方式( 用动态视图解决当前问题下文中,将提供三种解决思路和对应代码...方案一:在 Text 中直接使用图片方案一解决思路既然为不同动态类型提供不同尺寸图片可以满足 Text 图文混排需求,那么方案一就以此为基础,根据动态类型变化自动对给定预制图片进行等比例缩放即可...但能用现有的方法解决这类实际问题,何尝又不是一种挑战和乐趣?至少对如此。希望本文能够对你有所帮助。

4.3K30

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

地址://www.jianshu.com/p/a0342ee86431 嗨大家,好久不见~ 今天和大家一起聊聊处理不等高TableViewCell那些小花招~ ummmm…其实是个标题党~ ???...第一步:创建Cell并正确设置约束,使文字区域高度能够根据文字内容多少自动调整 第二步:再给这个Cell添加点别的东东,就叫这个东东BottomCub了。为Cub添加好约束。...自己算算看~ 通常情况下,Cell之所以不等高,是因为Cell内部文字区域高度根据文字数量动态变化,图片区域高度根据图片数量而自动变化。...也就是说,只要知道文字区域高度、图片区域高度,就可以硬生生计算出Cell高度了。...方案二:在请求到数据后马上计算 示例代码:见课题一方案二 说明:在这里进行计算相对于方案一说进步了很多,在这里计算是不错选择哦!

1.3K80

iOS 9 Storyboard 教程(二上)介绍Segue静态单元格(static cell)

在第一篇文章第一篇文章中,你已经学到了Interface Builder基本用法创建和连线多个控制器,以及使用在storyboard中可以通过直接创建自定义tableViewCell....view controller.在另一方面,segue所做改变都在控制器上.通过点击button,tableViewCell,手势等等触发segue....,选择Add Player控制器.在Identity inspector设置Class为PlayerDetailsViewController.总是忘记这至关重要一步,所以确保你没有忘记;后面还会指出...拖拽一个TextField到这个组cell里.拉伸宽然后去除border,那样你就不会看到text field开始和结尾.设置字体大小17.0,不勾选Adjust to Fit.....每一个静态单元格都只有一个实例,所以完全是可以接受视图控制器里通过连线连接它们视图.

3.2K10

你可能需要为你 APP 适配 iOS 11

需要注意是,你constraints需要在view内部设置,所以如果你有一个自定义标题视图,你需要确保任何约束只依赖于标题视图及其任何子视图。当你使用自动布局,系统假设你知道你在做什么。...管理margins 和 insets layout margins 基于约束Auto Layout,使我们搭建能够动态响应内部和外部变化用户界面。...提供两种方式:safeAreaInsets或safeAreaLayoutGuide提供给你safeArea参照值,即 insets 或者 layout guide。...因为不会缓存正确行高,tableView reloadData时候,会重新计算contentSize,就有可能会引起contentOffset变化。...写demo测试时候,因为每个cell高度都较小,所以只显示image,然后增加cell高度后,就可以同时显示image和title了。见下图对比: ?

1.6K60

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

消息原生架构图 方案 关于动态化技术栈选择 上面介绍了 iOS 端消息卡片渲染架构设计,那么为了让消息卡片具有动态能力,但是不会打乱现有原生架构情况下,我们采用了结合 weex 技术栈做这件事...原生端创建渲染 weex TableViewCell,将 weex 容器视图添加到 cell contentView 中去,利用 TableView 重用机制进行 cell 缓存和重用。...鉴于这样设计目标,在这个框架里,主要考虑以下方面: 在不改变原有原生架构基础上去做消息卡片动态化 页面布局动态化,意思是页面的排版布局,可以通过 weex 端和 JS 端发布达到动态更新 组件复用...JS 动态库也是利用 ZanWeex 平台开发、构建到发布,一整套流程都是完善,这里我们不去过多讨论 JS 动态相关内容,我们仅仅是用到动态下发能力,核心思路是: 利用 JS 动态根据消息类型下发对应...JS 动态根据消息类型判断当前 cell 是否是 weex卡片 cell 接入 JS 动态库 我们在 JS 动态库中,暴露出获取 weex 卡片对应 url 方法,入参是消息类型 获取 weex

1.1K20

android

目前iOS开发中大多数页面都已经开始使用Interface Builder方式进行UI开发了,但是在一些变化比较复杂页面,还是需要通过代码进行UI开发。...但并不会涉及到Masonry内部实现,以后会专门写篇文章介绍其内部实现原理,包括顺便讲一下链式语法。...Cell高度 在iOS UI开发过程中,UITableView动态Cell高度一直都是个问题。...但是这有个要求就是,需要提前知道contentSize大小,不然没法设置。 这个例子中将会展示动态改变contentSize大小,内部视图有多少contentSize就自动扩充到多大。...也就是containerView视图是contentView,通过containerView撑起contentView视图大小,以此实现动态改变contentSize。

72520

iOS 9 Storyboard 教程(一下)

,否则这个小方案将不会起作用!...先使cell在高一点.也可以在Size inspector(之后选择自定义)改变Row Height 值.或者拖动cell底部,设置高度60....恩…,那看起来不太对—cell显示好像被压扁了一些.你确实改变了原型cell高度,但 table view 却不这么认为.有两个方法解决这个问题:你可以改变 table view高度属性,或者实现...如果你现在运行app,看起来好多了! ? 顺便说一句,如果你通过拖拽改变了cell高度,而没有改变值,那么table view行高属性也会自动改变.所以在第一次可能是正确....使用cell子类 Table view已经非常好了,但是不是使用tag来访问标签和其他cell子视图粉丝.如果你能通过连线(outlet)连接这些标签(label),然后使用对应属性那么它将更干净

3K20

「 UITableView 入门 」新人解决列表 Cell 高度自适应,UITableViewCell 高度自适应

一、前言 我们在写列表时候,经常出现每一个 Cell 高度不一样情况,但是 iOS 这边是在是太不智能了 比起隔壁 android RecyclerView ,人家可以自动更具每一项高度进行伸缩变化...,还可能会改变的人生。"..., "对个人而言,美丽沙滩不仅仅是一个重大事件,还可能会改变的人生。 带着这些问题,我们审视一下美丽沙滩。 美丽沙滩,发生了会如何,不发生又会如何。..., "对个人而言,美丽沙滩不仅仅是一个重大事件,还可能会改变的人生。", "美丽沙滩因何而发生?...属性为 true 最后是,这个 cell 不能通过简单 frame 设置大小,而是需要通过 NSLayoutConstraint 动态给定 首先这里先提供下最终实现代码再逐个给大家分析: import

2.1K10

HarmonyOS组件开发 ScrollView嵌套ListContainer 滑动冲突问题

二、这时第二个思路也成型了,因为ScrollView高度根据内部组件高度变化,当内部组件高度大于手机屏幕高度时会出现ScrollView滚动,反之不会出现。...那么就只能从ScrollView高度入手了,要改变ScrollView高度就必须去改变内部组件高度,那么问题来了ScrollView嵌套ListContainer,ListContainer高度最大只能到屏幕大小或者是固定于屏幕内部...那么如果把ListContainer高度设置成一个动态固定值,ListContainer数据永远不会被填充满,ListContainer就不会出现滑动。...解决问题 首先找到了当初写Android时动态Listview高度方法。...这里就粘一下图 思路没有变,将每次listviewItem高度相加作为listview整体高度,listview高度就是动态变化,listview高度根据数据增加而变化

88820
领券