动态地将子视图添加到uitableviewcell

时间:2017-04-07 19:19:09

标签: ios swift uitableview draw

好吧,所以我试图做一些看起来真的很难的东西(换句话说,似乎无法弄清楚我做错了什么/错过了)

首先,我开始在代码中完全编写cell。这样我确实获得了所需的结果,但cell不会扩展为正确的height

现在我已切换到使用xib构建view。我需要的是以下内容:

enter image description here

如果没有subviews,则蓝色部分必须为零,以便labelimage填充整个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。我希望有人能够帮助我解决这个问题。我似乎无法弄清楚我哪里出错了。您还可以在此项目中找到以编程方式编写整个视图的类。

0 个答案:

没有答案