使用堆栈视图将图像添加到表视图单元格问题

时间:2019-08-06 13:19:30

标签: swift uitableview uistackview

在我的原型单元中,我有一个水平的堆栈视图,并将其连接到UITableViewCell,并在UITableViewCell中定义了一个将多个图像添加到堆栈视图的更新函数,然后我在TableViewController中调用了该函数cellForRowAt,但没有任何反应。

//inside UITableViewCell  
@IBOutlet weak var lineStack: UIStackView!

func update(_ imageName: String){
    let numberOfCopies = Int(deviceWidth/50)
    let startX = (Int(deviceWidth) - (numberOfCopies*50))/2
    xValue = xValue + startX
    let image = UIImage(named: imageName)

    for _ in 1...Int(numberOfCopies) {
        xValue = xValue + heightValue
        let imageView = UIImageView(image: image)
        imageView.frame = CGRect(x: xValue , y: 0, width: widthValue, height: heightValue)
        lineStack.addSubview(imageView)
    }
}

 //inside TableViewController

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Line", for: indexPath) as! LineTableViewCell
        let imageName = imagesName[indexPath.row]
        cell.update(imageName)
        return cell
 }

2 个答案:

答案 0 :(得分:0)

对于该行:

  

lineStack.addSubview(imageView)

您需要使用addSubview()来代替addArrangedSubview()。前者是向视图中添加子视图的常规方法,而后者是专门用于UIStackView的,它告诉视图正确插入它。

答案 1 :(得分:0)

您的帖子表明您希望图像50 x 50个点...对.addArrangedSubview()使用自动布局约束:

class TestCell: UITableViewCell {

    @IBOutlet var lineStack: UIStackView!

    func update(_ imageName: String) {
        let numberOfCopies = Int(deviceWidth/50)
        let image = UIImage(named: imageName)

        for _ in 1...Int(numberOfCopies) {
            let imageView = UIImageView(image: image)
            imageView.translatesAutoresizingMaskIntoConstraints = false
            imageView.widthAnchor.constraint(equalToConstant: 50).isActive = true
            imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true
            lineStack.addArrangedSubview(imageView)
        }
    }
}

编辑示例结果,堆栈视图水平居中:

enter image description here

堆栈视图设置为:

Axis: Horizontal
Alignment: Fill
Distribution: Fill
Spacing: 0

这是有约束的布局:

enter image description here

请注意,堆栈视图的宽度约束为10,但其优先级为250 ...允许堆栈视图水平拉伸,同时使IB满足约束条件。