动态调整自定义 xib 单元格的大小

Posted

技术标签:

【中文标题】动态调整自定义 xib 单元格的大小【英文标题】:Dynamically resize custom xib cell 【发布时间】:2019-10-12 04:38:09 【问题描述】:

所以我的自定义 xib 单元格没有根据单元格内部的 UILabel 动态调整大小时遇到​​了一些问题。我已经设置了

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return UITableView.automaticDimension
    
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    return 250
    

XIB 单元视图控制器

import UIKit

class ReminderTableViewCell: UITableViewCell 

@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var progressBar: UIProgressView!
@IBOutlet weak var notesLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code
    backgroundColor = .clear // very important
    layer.masksToBounds = false
    layer.shadowOpacity = 1
    layer.shadowRadius = 4

    layer.shadowOffset = CGSize(width: 2 , height: 2)
    layer.shadowColor = UIColor.darkGray.cgColor

    // add corner radius on `contentView`
    contentView.backgroundColor = .darkGray
    contentView.layer.cornerRadius = 8
    progressBar.transform = progressBar.transform.scaledBy(x: 1, y: 5)
    progressBar.layer.cornerRadius = 15
    progressBar.clipsToBounds = true
    self.layer.sublayers![1].cornerRadius = 15
    self.subviews[1].clipsToBounds = true


override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)


    // Configure the view for the selected state



func setInfo(title:String, notes:String,date:String)
    titleLabel.text = title
    notesLabel.text = notes
    dateLabel.text = date



override func layoutSubviews() 
    super.layoutSubviews()

    contentView.frame = contentView.frame.inset(by: UIEdgeInsets(top: 10, left: 15, bottom: 15, right: 10))


 

XIB 的限制

外观

我将 titleLabel 和 userNotes 的行都设置为 0,并且两者都有自动换行。

如果你们能帮助我,我会非常感谢。

【问题讨论】:

【参考方案1】:

一旦你应该像这样尝试。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 返回 250

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
return UITableView.automaticDimension

【讨论】:

以上是关于动态调整自定义 xib 单元格的大小的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局自定义集合视图单元格的动态高度

UICollectionView 自调整大小的单元格

在自定义单元格中调整 iOS 7.1 中的 UILabel 大小

来自自定义 Xib 的表格视图中的动态单元格大小 [重复]

根据 JSON 文件中的内容文本调整带有 UILabel 的自定义单元格的大小

具有自动调整大小的单元格的自定义 UICollectionViewLayout 会因估计的项目高度较大而中断