ios 单元格中UITextView 高度自适应

4 篇文章 0 订阅

在单元格中使用UITextView时,由于输入内容的不确定,无法事先确定单元格的高度(UITextView相对于单元格的约束已设定的情况),就需要根据UITextView的高度自适应单元格的高度。

方案:

1、UITextView约束的设置,我这里设置约束使用的是SnapKit;

 tableViewCell.contentView.addSubview(textView)

 textView.snp.makeConstraints { (make) in
            make.left.equalTo(15)
            make.right.equalTo(-15)
            make.top.equalTo(titleLabel.snp.bottom).offset(5)
            make.height.greaterThanOrEqualTo(20)        // 事先设置一个高度,保证UITextView能显示出来
        } 

2、实现UITextView代理方法:

func textViewDidChange(_ textView:UITextView) {
        var bounds:CGRect = textView.bounds
        let maxSize = CGSize(width:bounds.size.width,height:1000)   // height可以根据需要自己修改
        let newSize = textView.sizeThatFits(maxSize)
        bounds.size = newSize
        self.fbmInventoryRecord?.inventoryDescirbe = textView.text
        if refreshTableCallBack != nil {
            refreshTableCallBack!()                  //回调方法,刷新单元格 
        }

}


3、刷新单元格:回调到单元格之后刷新

cell?.refreshTableCallBack = { [weak self] in
        self?.tableView.beginUpdates()
        self?.tableView.endUpdates()
}

4、最最最重要的设置:

a、UITextView一定要设置成不可以滚动,即:

textView.isScrollEnabled = false

b、必须事先给textView一个高度(约束中的代码:make.height.greaterThanOrEqualTo(20)),不然UITextView显示不出来,更不要说编辑了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,您需要将 YYLabel 添加到 UITableViewCell 。 您可以通过在 UITableViewCell 子类创建 YYLabel 实例并将其添加到 contentView 来完成此操作。 您可以使用自动布局或手动布局将 YYLabel 放置在所需的位置上。 接下来,您需要创建 NSMutableAttributedString,其包含 UITextView 和其他文本。 然后,您可以使用 NSMutableAttributedString 的 insert 方法将 UITextView 作为附件添加到文本。 以下是一个示例代码片段: ```swift let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 50)) textView.text = "This is a UITextView" let attachment = NSTextAttachment() attachment.bounds = CGRect(x: 0, y: 0, width: 100, height: 50) attachment.setAttachmentContent(textView) let attributedString = NSMutableAttributedString(string: "This is a YYLabel with a UITextView attachment") attributedString.insert(NSAttributedString(attachment: attachment), at: 21) yyLabel.attributedText = attributedString ``` 最后,您需要处理 UITextView 和 UITableView 之间的交互。您需要将 UITextView 的 isEditable 属性设置为 false,以防止用户编辑文本。您还需要在 UITableViewDelegate 实现 heightForRowAt 和 estimatedHeightForRowAt 方法来动态计算 UITableViewCell 的高度,以适应包含 UITextView 的 YYLabel。 以下是一个示例 UITableViewDelegate 实现: ```swift class MyTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() tableView.register(MyTableViewCell.self, forCellReuseIdentifier: "cell") } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell // Configure the cell... return cell } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MyTableViewCell cell.configure(with: "This is a YYLabel with a UITextView attachment") return cell.systemLayoutSizeFitting(CGSize(width: tableView.frame.width, height: UIView.layoutFittingCompressedSize.height)).height } override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { return UITableView.automaticDimension } } ``` 请注意,此示例实现了一个名为 MyTableViewCell 的 UITableViewCell 子类,该子类包含一个名为 yyLabel 的 YYLabel 实例。 该子类还实现了一个名为 configure(with:) 的方法,该方法接受一个字符串参数,并在 YYLabel 设置带有 UITextView 附件的 NSMutableAttributedString。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值