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

加载后更改UITableViewCell高度

是指在iOS开发中,当UITableView加载完数据后,根据数据内容动态调整UITableViewCell的高度。

UITableViewCell是UITableView中的一种视图,用于展示列表中的每一行数据。默认情况下,UITableViewCell的高度是固定的,但在某些情况下,我们希望根据数据的内容来动态调整UITableViewCell的高度,以便更好地展示数据。

为了实现加载后更改UITableViewCell高度,我们可以使用UITableViewDelegate中的一个方法:tableView(_:heightForRowAt:)。这个方法会在UITableView加载数据时被调用,用于确定每一行UITableViewCell的高度。

具体步骤如下:

  1. 在UITableView的代理类中,实现tableView(_:heightForRowAt:)方法。
  2. 在该方法中,根据数据内容计算UITableViewCell的高度,并返回计算得到的高度。
  3. 在UITableView加载数据后,UITableView会自动调用tableView(_:heightForRowAt:)方法来获取每一行UITableViewCell的高度,并根据返回的高度来设置UITableViewCell的高度。

下面是一个示例代码:

代码语言:swift
复制
class MyTableViewController: UITableViewController {
    var data: [String] = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."]

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 注册UITableViewCell的重用标识符
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let text = data[indexPath.row]
        let font = UIFont.systemFont(ofSize: 17) // 设置字体大小
        let width = tableView.frame.width - 16 // 设置UITableViewCell的宽度,减去左右边距
        let height = text.height(withConstrainedWidth: width, font: font) // 计算文本的高度
        return height + 20 // 返回计算得到的高度,加上上下边距
    }
}

extension String {
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil)
        return ceil(boundingBox.height)
    }
}

在这个示例中,我们通过计算文本的高度来动态调整UITableViewCell的高度。heightForRowAt方法中,我们使用了一个扩展方法height(withConstrainedWidth:font:)来计算文本的高度。这个方法使用了NSString的boundingRect(with:options:attributes:context:)方法来计算文本的高度。

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

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

相关·内容

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

一、前言 我们在写列表的时候,经常出现每一个 Cell 高度不一样的情况,但是 iOS 这边是在是太不智能了 比起隔壁 android 的 RecyclerView ,人家可以自动更具每一项高度,来进行伸缩变化...cell 的高度,伸缩变换显示出来,网上有很多类似的帖子,但是大都纸上谈兵,没图没代码地讲不清楚,而且还都是 n 年前的文章 那么开始前。...NSLayoutConstraint 来动态给定 首先这里我先提供下最终实现的代码再逐个给大家分析: import Foundation import UIKit class MemberCell: UITableViewCell...contentView.bottomAnchor, constant: -10), ]) } } 3.2.1 子控件实现 为了提高代码可读性,这里建议大家使用懒加载的形式...} override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

2.1K10
  • UITableViewCell自适应网络不规则图片和文字组合的高度

    列表样式 有时我们会需要对cell的图片和文字进行显示并完美自适配其大小,下面用我有限的知识做了个适配,看着好像还能用,哈哈 直接上code 001 在tableview的获取cell高度的方法里写调用自定义...return [cell cellForHeight]; } 002 接下来开始重点喽 自定义TableViewCell的.h文件, 做主要控件 @interface TableViewCell : UITableViewCell...//赋值 and 自动换行,计算出cell的高度 -(void)setreviewContentText:(NSString*)text { //获得当前cell高度 CGRect frame = [...image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey: imageURL]; // 没有找到已下载的图片就使用默认的占位图,当然高度也是默认的高度了...,除了高度不固定的文字部分。

    2.1K20

    元素滚动高度和图片懒加载

    二、元素滚动高度 当一个元素的内容多,高度超出他所在的容器高度,会出现滚动条 1、element.scrollHeight 元素滚动内容的总长度 element.scrollHeight 元素滚动内容的总长度...如果元素没出现滚动条, scrollHeight等于 clientHeight 2、element.scrollTop 滚动的高度 元素滚动的距离 3、window.innerHeight 窗口的高度...如果想学习懒加载的朋友,建议直接观看这篇文章实现图片懒加载(Lazyload),这篇文章写得很好, 懒加载主要是使用于图片比较多的情况,一次性加载所有的图片会给服务器比较大的压力,加载比较慢,所以我们先不加载未出现在页面可视区域内的图片...,等到滚动到可视区域再去加载。...滚动时offset的值,offset().top为元素距离页面内容的高度 ? 3、把图片data-src换成src值 <!

    1.6K20

    CentOS挂载NAS存储权限的更改

    上次用centos挂载HP共享存储发现一个问题,默认挂载到本地的目录属主和属组为当前挂载用户,而且无法更改,这里记录一下处理过程 1.umount已挂载的文件系统 umount /backup 2....取消共享存储的'根限制' 注:红圈里面的'根限制'要取消勾选,然后点击更新 3.重新挂载nfs文件系统 #这里注意,使用默认的挂载方式挂载,nfs默认的文件系统版本为 nfs4,如下例子: [root...boot 10.1.1.133:/nas/nfs-ts nfs4 466G 4.0M 466G 1% /backup #这里挂载时指定nfs文件系统为 nfs3 即可解决无法修改挂载目录无法修改属主和属组的问题...797M 13% /boot 10.1.1.133:/nas/nfs-ts nfs 466G 4.0M 466G 1% /backup 4.修改属主属组测试 #这里可以看到挂载默认属主属组为当前挂载用户...2019 dev 5.勾选'根限制' 最后我们为了安全,再次将'根限制'勾选,这样做的意义是:就算你用nfs3挂载的文件系统,那么依然无法修改属主属组,更为安全,如下图: #勾选了'根限制'我们在来修改属主属组测试

    4K10

    UITableView性能优化-中级篇

    老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 Cell高度预先计算 缓存Cell高度 圆角切割 等等. . ....进阶篇 最近遇到一个需求,对tableView有中级优化需求 要求 tableView 滚动的时候,滚动到哪行,哪行的图片才加载并显示,滚动过程中图片不加载显示; 页面跳转的时候,取消当前页面的图片加载请求...; 以最常见的cell加载webImage为例: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath...runloopDemo.gif 效果如上 滚动的时候不加载图片,滚动结束加载图片-满足 滚动结束,之前滚动过程中的cell会加载图片 => 不满足需求 版本回滚到Runloop之前 - git reset...cancelLoadImage{ [_task cancel]; } @end 思路: 创建一个可变字典,以indexPath:manager的格式,将当前的图片下载操作存起来 每次下载之前,将当前下载线程存入,下载成功

    1.6K20

    UITableView图文混排自动布局滑动优化实战

    方案 1.缓存高度 既然手动计算高度更快,那就在Reuse的时候用AutoLayout帮我们算过后的高度就行了,缓存一个高度字典(或者数组),在算完渲染出来的时候取高度,在取高度的时候做个判断就行。...//保存高度 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath...因此可以把很重的内容,比如图片放到willDisplayCell的时候再加载。...- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:...预加载分为两种,一种是图片预加载,另一种是内容预加载,先说内容预加载,其实就是在指定滚动到第几个cell的时候开始分页请求,这样用户就会无感知的开开心心的刷刷刷了。

    1.3K10

    【IOS开发基础系列】Table View开发专题

    = UITableViewCellSeparatorStyleNone; 2.2.3 UITableview最后一行显示不全         tableview的高度减去tabbar的高度就好了。     ...的宽度是320高度是44         因为在iOS5的时候, 默认Cell就是320宽(那阵屏幕就是那么宽,然后高度是44) 现在是在layoutSubViews 重新绘制这个cell的宽度和高度,...做到前几点,你的table view滚动时应该足够流畅了,不过你仍可能让用户感到不爽。常见的现象就是在更新数据时,整个界面卡住不动,完全不响应用户请求。...例如每次载入50条信息,那就可以在滚动到倒数第10条以内时,加载更多信息: - (void) tableView: (UITableView *)tableView willDisplayCell: (...updating) {         updating = YES;         [self update];     } } // update方法获取到结果,设置updating为NO 还有一点要注意的就是当图片下载完成

    35720

    iOS_UITableView性能优化

    // 提前计算并缓存好高度 // 滑动时按需加载, 防止卡顿 配合SDWebImage https://github.com/johnil/VVeboTableViewDemo dispatch_async...(DISPATCH_QUEUE_PRIORITY_DEFAULT, ^{ // 异步绘制 }); // 缓存一切可以缓存的 // 默认高度44 定高的cell最好指定高度, 减少不必要的计算 self.tabelView.rowHeight...可以将数据绑定放在cell显示出来之后再执行 以提高效率 // 缓存不便于重用的view (存model里) // --------   自适应高度   -------- // 尽量提高计算效率, 已计算过的高度需要进行缓存...*)cell forRowAtIndexPath:(NSIndexPath *)indexPath { } - (UITableViewCell *)tableView:(UITableView *)...*indexPath in visiblePaths) { // 获取dataSource里的对象, 并且判断加载完成是不需要再次异步加载         }     } return cell

    63320
    领券