向UITableViewCell contentView添加约束

时间:2015-05-19 10:40:24

标签: ios uitableview swift nslayoutconstraint

我正在尝试向tableViewCellSubViews添加约束,如此 -

import UIKit

class SnakeTableViewCell: UITableViewCell {

    var lessonViews = Array<UIView>()

    override func awakeFromNib() {
        super.awakeFromNib()

        for var i = 0; i < 3; ++i
        {
            var view = UIView(frame: CGRectMake(CGFloat(i) * 110.0, 0.0, 100.0, 100.0))
            view.backgroundColor = UIColor.redColor()
            view.setTranslatesAutoresizingMaskIntoConstraints(false)
            self.contentView.addSubview(view)
            lessonViews.append(view)
        }

        self.addConstraints(NSLayoutConstraint.constraintsForEvenDistributionOfViews(lessonViews, relativeToCenterOfView: self, vertically: false))

    }

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

        // Configure the view for the selected state
    }

}

和约束代码 -

extension NSLayoutConstraint {

    class func constraintsForEvenDistributionOfViews(views:Array<UIView>,relativeToCenterOfView toView:UIView, vertically:Bool ) -> Array<NSLayoutConstraint> {
        var constraints = Array<NSLayoutConstraint>()
        let attribute = vertically ? NSLayoutAttribute.CenterY : NSLayoutAttribute.CenterX


        for (index, view) in enumerate(views) {

            let multiplier = CGFloat(2*index + 2) / CGFloat(views.count + 1)
            let constraint = NSLayoutConstraint(item: view, attribute: attribute, relatedBy: NSLayoutRelation.Equal, toItem:toView, attribute: attribute, multiplier: multiplier, constant: 0)
            constraints.append(constraint)
        }
        return constraints
    }
}

问题在于,当我添加约束时,所有子视图都会消失。

知道我做错了什么吗?

由于

2 个答案:

答案 0 :(得分:0)

乘数通常为1.常数是变量(水平或垂直量。

您可以在Storyboard中设置自定义单元格,均匀分布的子视图及其约束。在Interface Builder中执行它比在代码中创建和约束视图要简单得多。

您只需将可重复使用的单元格出列,并且它已经获得了正确间隔的视图,因为单元格已经实例化并为您分隔它们。

答案 1 :(得分:0)

您可以按如下所示在contentView中的UITableViewCell的{​​{1}}的{​​{1}}中添加约束(在这种情况下,以5pt的间隔进行调整):

init(style:, reuseIdentifier:)

它可以工作,但是...系统会抱怨:

contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 5).isActive = true
contentView.topAnchor.constraint(equalTo: self.topAnchor, constant: 5).isActive = true
contentView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -5).isActive = true
contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -5).isActive = true

警告仅出现一次(即使我有多个单元格)

我这样做是为了添加内部边框和阴影(不使用会影响平滑滚动的其他视图)。但是,如果要在生产环境中使用它,则可能要考虑“不支持”和“不确定的行为”。enter image description here