好吧,所以我试图做一些看起来真的很难的东西(换句话说,似乎无法弄清楚我做错了什么/错过了)
首先,我开始在代码中完全编写cell
。这样我确实获得了所需的结果,但cell
不会扩展为正确的height
。
现在我已切换到使用xib
构建view
。我需要的是以下内容:
如果没有subviews
,则蓝色部分必须为零,以便label
和image
填充整个cell
。当有子视图时,应将它们添加到子视图中,并且单元格需要扩展到所需的高度。
以下是我编写的用于将子视图添加到容器的代码。
override func draw(_ rect: CGRect) {
super.draw(rect)
drawSubCells()
}
func drawSubCells() {
// Check if there are subcells
if let cells = subCells {
let count = CGFloat(cells.count)
let contentViewFrame = CGRect(x: self.frame.width * 0.2, y: cell_contentView.frame.origin.y, width: self.frame.width * 0.8, height: 40 * count)
cell_contentView.frame = contentViewFrame
var i = 0
for cell in cells {
// create a view for each cell
let cellView = UIView()
let cellFrame = CGRect(x: 0, y: CGFloat(i * 40), width: contentViewFrame.width, height: 40)
cellView.frame = cellFrame
// add a image view to each cell
let imageView = UIImageView(image: cell.cellImage)
let imageViewFrame = CGRect(x: 0, y: (cellFrame.height - cellFrame.height / 2) / 2, width: cellFrame.width * 0.2, height: cellFrame.height / 2)
imageView.frame = imageViewFrame
imageView.contentMode = .scaleAspectFit
// add a label to each cell
let cellLabel = UILabel()
let cellLabelFrame = CGRect(x: imageViewFrame.width, y: 0, width: cellFrame.width - imageViewFrame.width, height: 40)
cellLabel.frame = cellLabelFrame
//cellLabel.font = cell.cellFont
cellLabel.textColor = cell.cellTextColor
cellLabel.text = cell.cellText.uppercased()
cellLabel.minimumScaleFactor = 15
// add the imageview and label to the subcell view
cellView.addSubview(imageView)
cellView.addSubview(cellLabel)
// add the subcell to the cell
cell_contentView.addSubview(cellView)
i += 1
}
}
}
然而,这并不起作用。我认为这与我的xib中的约束不正确有关。
我上传了一个项目(这是一个测试项目)here。我希望有人能够帮助我解决这个问题。我似乎无法弄清楚我哪里出错了。您还可以在此项目中找到以编程方式编写整个视图的类。