【问题标题】:Self sizing cell with multiple Stack Views具有多个堆栈视图的自定尺寸单元
【发布时间】:2021-10-22 11:45:01
【问题描述】:

我浏览了整个论坛并尝试了所有解决方案,但到目前为止没有任何效果。我注意到我的 UIImageView 覆盖了多个单元格,这意味着单元格没有自动调整其高度。这是我在它抱怨的控制台中发现的约束。

"<0x600001970f50 uitableviewcellcontentview:0x7f86a4813dd0.height="=">

    标签: ios uitableview


    【解决方案1】:

    首先,单元格的contentView 是一个“特殊”视图,其属性对于表格视图的操作是不可或缺的。

    所以,不要这样做:

    self.contentView.autoresizingMask = .flexibleHeight
    

    其次,layoutSubviews() 在单元格/视图的生命周期中可以(并且通常是)多次调用。您的约束设置应该在init 中完成:

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier:reuseIdentifier)
        
        stackViewLeft.addArrangedSubview(leftImageView)
        stackViewLeft.addArrangedSubview(leftLabel)
        
        stackViewRight.addArrangedSubview(rightImageView)
        stackViewRight.addArrangedSubview(rightLabel)
        
        stackViewMain.addArrangedSubview(stackViewLeft)
        stackViewMain.addArrangedSubview(middleLabel)
        stackViewMain.addArrangedSubview(stackViewRight)
        
        contentView.addSubview(stackViewMain)
        
        NSLayoutConstraint.activate([
            
            // constrain main stack view to all 4 sides of contentView
            stackViewMain.topAnchor.constraint(equalTo: contentView.topAnchor,constant: 0),
            stackViewMain.leadingAnchor.constraint(equalTo: contentView.leadingAnchor,constant: 0),
            stackViewMain.trailingAnchor.constraint(equalTo: contentView.trailingAnchor,constant: 0),
            stackViewMain.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0),
    
            // constrain left image view Width: 100-pts,
            //  Height equal to Width (1:1 ratio)
            leftImageView.widthAnchor.constraint(equalToConstant: 100.0),
            leftImageView.heightAnchor.constraint(equalTo: leftImageView.widthAnchor),
            
            // constrain right image view Width: 100-pts,
            //  Height equal to Width (1:1 ratio)
            rightImageView.widthAnchor.constraint(equalToConstant: 100.0),
            rightImageView.heightAnchor.constraint(equalTo: rightImageView.widthAnchor),
            
        ])
        
    }
    

    所以...用上面的代码替换您的 init完全删除您的 awakeFromNib()layoutSubviews() 函数。

    你应该得到这个:

    【讨论】:

    • 这解决了这个问题。感谢您澄清应该在哪里设置约束。
    猜你喜欢
    • 2019-12-04
    • 2017-03-24
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多