我正在尝试向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
}
}
问题在于,当我添加约束时,所有子视图都会消失。
知道我做错了什么吗?
由于
答案 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
警告仅出现一次(即使我有多个单元格)
我这样做是为了添加内部边框和阴影(不使用会影响平滑滚动的其他视图)。但是,如果要在生产环境中使用它,则可能要考虑“不支持”和“不确定的行为”。