swift - 实现tableViewCell高度自适应(随cell内部textView高度的变化而变化)

编程之家收集整理的这篇文章主要介绍了swift - 实现tableViewCell高度自适应(随cell内部textView高度的变化而变化)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

实现思路:1)设置cell的高度为自动计算:UITableView.automaticDimension2)为cell内部的view控件添加上下约束如图所示,当cell高度自动计算,且约束添加成功时,cell竖直方向被撑满,这样cell的高度就会随着view控件的高度变化了 。实现步骤:步骤一(自定义tableViewCell,设置约束!!!这里只使用一个label标题和一个textView模拟):创建TableViewControllerCell.swift文件,并添加如下,下方主要介绍关于swift - 实现tableViewCell高度自适应(随cell内部textView高度的变化而变化)的全文内容,希望对你有所帮助。

实现思路:

1)设置cell的高度为自动计算:UItableVIEw.automaticDimension

2)为cell内部的vIEw控件添加上下约束

如图所示,当cell高度自动计算,且约束添加成功时,cell竖直方向被撑满,这样cell的高度就会随着vIEw控件的高度变化了 。

​​​​​​​实现步骤:

步骤一(自定义tableVIEwCell,设置约束!!!这里使用一个label标题一个textVIEw模拟):创建tableVIEwControllerCell.swift文件,并添加如下代码

// 自定义tableVIEwCell。以便使用“复用”特性
class tableVIEwControllerCell: UItableVIEwCell {
    var TitleLabel = UILabel()
    var textVIEw = UITextVIEw()
    
    overrIDe init(style: UItableVIEwCell.CellStyle,reuseIDentifIEr: String?) {
        super.init(style: .value1,reuseIDentifIEr: nil)
        
        // 设置label控件
        self.TitleLabel.frame = CGRect(x: 20,y: 15,wIDth: 60,height: 20)
        self.TitleLabel.backgroundcolor = .yellow
        self.contentVIEw.addSubvIEw(self.TitleLabel)
        
        // 设置textVIEw控件
        self.textVIEw.frame = CGRect(x: 100,y: 10,wIDth: 100,height: 20)
        self.textVIEw.backgroundcolor = .green
        // 设置textVIEw的内容不能滑动
        self.textVIEw.isScrollEnabled = false
        self.contentVIEw.addSubvIEw(self.textVIEw)
        
        // 为textVIEw添加约束
        self.constraintsTextVIEw()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // 为textVIEw添加约束
    func constraintsTextVIEw() {
        // 将textVIEw的autolayout设置失效,否则下面约束不起作用
        self.textVIEw.translatesautoresizingMaskIntoConstraints = false
        
        // 设置顶部约束
        self.textVIEw.supervIEw?.addConstraint(NSLayoutConstraint(item: self.textVIEw,attribute: .topmargin,relatedBy: .equal,toItem: self.contentVIEw,multiplIEr: 1.0,constant: 10))
        // 设置底部约束
        self.textVIEw.supervIEw?.addConstraint(NSLayoutConstraint(item: self.textVIEw,attribute: .bottommargin,constant: -10))
        // 设置左侧约束
        self.textVIEw.supervIEw?.addConstraint(NSLayoutConstraint(item: self.textVIEw,attribute: .leftmargin,constant: 100))
        // 设置宽度约束
        self.textVIEw.addConstraint(NSLayoutConstraint(item: self.textVIEw,attribute: .wIDth,toItem: nil,attribute: .notAnAttribute,constant: 200))
        // 设置高度约束
        self.textVIEw.addConstraint(NSLayoutConstraint(item: self.textVIEw,attribute: .height,relatedBy: .greaterThanorEqual,constant: 30))  
    }
    
}

步骤二(创建tableVIEw控件):创建tableVIEwController.swift文件,并添加如下代码这里一定要设置tablevIEw的代理和数据源。cell复用机制的使用请移步 UITableViewCell复用机制的使用步骤 一文。

import UIKit

class tableVIEwController: UIVIEwController {
    private var tableVIEw: UItableVIEw!
    
    overrIDe func vIEwDIDLoad() {
        super.vIEwDIDLoad()
        
        // 添加tableVIEw控件
        self.tableVIEw = UItableVIEw(frame: CGRect(x: 0,y: 0,wIDth: self.vIEw.frame.wIDth,height: self.vIEw.frame.height))
        // 注册tablevIEwCell复用池
        self.tableVIEw.register(tableVIEwControllerCell.self,forCellReuseIDentifIEr: "cell")
        // 设置代理
        self.tableVIEw.delegate = self
        // 设置数据源
        self.tableVIEw.dataSource = self
        
        self.vIEw.addSubvIEw(self.tableVIEw)
    }
    
    overrIDe func vIEwDIDAppear(_ animated: Bool) {
        super.vIEwDIDAppear(true)
        
        // 刷新tableVIEw的数据
        self.tableVIEw.reloadData()
    }
    
}

步骤三(设置cell的高度为自动计算UItableVIEw.automaticDimension!!!):tableVIEw各项设置代码如下,注意在cellForRowAt方法设置tetxvIEw的代理。

extension tableVIEwController: UItableVIEwDelegate,UItableVIEwDataSource {
    
    // 设置tableVIEw每行的预估高度
    func tableVIEw(_ tableVIEw: UItableVIEw,estimatedHeightForRowAt indexPath: IndexPath) -> CGfloat {
        return 55
    }
    
    // 设置tableVIEw每行的高度自适应
    func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {
        return UItableVIEw.automaticDimension
    }

    // 设置tableVIEw的Section数量
    func numberOfSections(in tableVIEw: UItableVIEw) -> Int {
        return 2
    }

    // 设置tableVIEw每一个section的行数
    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    // 设置tableVIEw每一行的内容
    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {
        // 复用tableVIEwCell
        let cell = self.tableVIEw.dequeueReusableCell(withIDentifIEr: "cell",for: indexPath) as! tableVIEwControllerCell
        
        // 设置每一行的标题
        cell.TitleLabel.text = "第" + String(indexPath.section) + "行"
        // 设置textVIEw的代理
        cell.textVIEw.delegate = self
        
        return cell
    }
    
}

步骤四实现textvIEw高度自适应

// 设置textVIEw高度自适应
extension tableVIEwController: UITextVIEwDelegate {
    func textVIEwDIDChange(_ textVIEw: UITextVIEw) {
        // 储存原textVIEw的大小
        let oldSize = textVIEw.frame.size
        
        // 预设textVIEw的大小,宽度设为固定宽度,高度设为CGfloat的最大值
        let presetSize = CGSize(wIDth: textVIEw.frame.size.wIDth,height: CGfloat.greatestFiniteMagnitude)
        
        // 重新计算textVIEw的实际大小
        let newSize = textVIEw.sizeThatFits(presetSize)
        
        // 更新textVIEw的大小
        textVIEw.frame = CGRect(origin: CGPoint(x: textVIEw.frame.origin.x,y: textVIEw.frame.origin.y),size: CGSize(wIDth: textVIEw.frame.size.wIDth,height: newSize.height))
        
        // 当高度变化时,刷新tablevIEw(beginUpdates和endUpdates必须成对使用)
        if newSize.height != oldSize.height {
            self.tableVIEw.beginUpdates()
            self.tableVIEw.endUpdates()
        }
    }
    
}

实现效果

总结

以上是编程之家为你收集整理的swift - 实现tableViewCell高度自适应(随cell内部textView高度的变化而变化)全部内容,希望文章能够帮你解决swift - 实现tableViewCell高度自适应(随cell内部textView高度的变化而变化)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Swift文章

demo 传送门demo效果图前言ios 10.0因为 UI 做了一些很别致的进度条效果图,而且在网上又找不到合适的三方库,自己在网上查查资料做了出来,然后整理了一下,分享给大家使用首先,这个东西只是用贝赛尔曲线做出来的,并不是很难,做出来只是略微麻烦一点,网上也有很多资料,不过并不是很多,所以我就整理了一下,一是整理备份一下记录,二是分享给大家看下1、绘制这个断断续续的进度条UI 设计很漂亮,但是由于数据过多或过少,导致太难看,最后放弃1.1 初始化一个贝塞尔直线///贝塞尔直线
xcode13正式版已经更新,这是Mac平台上一款专业的开发工具,Xcode 13 for Mac添加了强大的新团队开发功能,非常适合与Xcode云以及GitHub、Bitbucket和GitLab协作功能,你还能在Xcode中直接发起、审查、评论和合并拉取请求,这次的xcode mac版功能更加完善,欢迎各位来体验哦!Xcode 13 for Mac官方介绍Xcode 包含开发人员为 Mac、iPhone、iPad、Apple TV 和 Apple Watch 创建出色应用程序所需的一切。Xc
swift是完全无中心架构,采用一致性哈希算法获得数据的位置。本文简要总结swift存储的整体架构和关键技术,进一步了解不同分布式存储技术实现原因上的差异。
实现思路:1)设置cell的高度为自动计算:UITableView.automaticDimension2)为cell内部的view控件添加上下约束如图所示,当cell高度自动计算,且约束添加成功时,cell竖直方向被撑满,这样cell的高度就会随着view控件的高度变化了 。实现步骤:步骤一(自定义tableViewCell,设置约束!!!这里只使用一个label标题和一个textView模拟):创建TableViewControllerCell.swift文件,并添加如下
前言xcode 13.3iOS 15.4TextField 明文显示的输入框文字输入框,相当于OC的UITextFieldTextFieldStyleTextField 有自己的风格,给我们提供了一些选项:1、PlainTextFieldStyle:.textFieldStyle(.plain)A text field style with no decoration.没有装饰的文本字段样式。2、DefaultTextFieldStyle: TextField 的默认样式,在 i
一 开发工具版本:01 iOS 开发工具版本Xcode Version 13.3 (13E113)02 iOS项目开发语言为Swift4.203 Unity开发工具版本 2019.4.16f1c1二 新建一个iOS项目和Unity项目01 iOS新建一个Swift语言的项目。在新建的iOS工程里,新建文件夹Unity_Framework_Project,后续unity导出的工程放到这个文件夹里02 Unity项目里,切到iOS平台Unity将程序包导出,放入iOS工程里的文件夹
1、闭包的概念闭包是可以在代码中被传递和引用的功能性独立代码块,跟C和Objective-C中的代码块(blocks)和其他一些语言中的匿名函数相似闭包可以作为函数的参数也可以作为函数的返回值可以像oc中用于回调和反向传值闭包能够捕获和存储定义在其上下文中的任何常量和变量的引用全局和内嵌函数,实际上是特殊的闭包。闭包符合如下三种形式中的一种:全局函数是一个有名字但不会捕获任何值的闭包内嵌函数是一个有名字且能从其上层函数捕获值的闭包闭包表达式是一个轻量级语法所写的可以捕获其上下文中常量或
Image 图片在SwiftUI中, 使用 Image 渲染图片, Image 可以加载 资源包, 系统图标, UIImage 等图片资源.基本用法1.从资源包内加载图片Image("cat")2.加载UIImage图片Image(uiImage: UIImage(named: "dog")!)3.加载苹果的 SF Symbols IconImage(systemName: "cloud.heavyrain.fill") .font(.largeTitle)属性设置内容显示
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注