如何向 UICollectionViewCell 内的标签添加约束?

How to add constraints to a label inside of a UICollectionViewCell?

我有一个UILabel

var cellTitle = UILabel()

我有一个 cellForItemAtIndexPath 方法,我在其中声明一个带有标识符的单元格,并向我创建的名为 cellTitle:

的标签添加约束
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as UICollectionViewCell
    cellTitle = UILabel(frame: CGRectMake(0, 0, cell.bounds.size.width, 160))
    cellTitle.numberOfLines = 3
    cell.contentView.addSubview(cellTitle)
    cell.addConstraints([
        NSLayoutConstraint(item: cell, attribute: .CenterX, relatedBy: .Equal, toItem: cellTitle, attribute: .CenterX, multiplier: 1.0, constant: 0.0),
        NSLayoutConstraint(item: cell, attribute: .CenterY, relatedBy: .Equal, toItem: cellTitle, attribute: .CenterY, multiplier: 1.0, constant: 0.0)
    ])
}

我在 运行 模拟器时遇到此错误:

您可能不想要以下列表中的至少一项约束。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) (

    "<NSLayoutConstraint:0x7baaac40 UICollectionViewCell:0x7b981570.centerY == UILabel:0x7baa3dd0'Towed by smaller boats, c...'.centerY>",
    "<NSAutoresizingMaskLayoutConstraint:0x7baa5c70 h=--& v=--& UILabel:0x7baa3dd0'Towed by smaller boats, c...'.midY == + 80>",
    "<NSLayoutConstraint:0x7baa5d50 'UIView-Encapsulated-Layout-Height' V:[UICollectionViewCell:0x7b981570(210)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x7bab1110 h=--- v=--- 'UIView-Encapsulated-Layout-Top' V:[UICollectionViewCell:0x7b981570]-(0)-|>"

)

将尝试通过打破约束来恢复

在我使用 addConstraints 方法的部分,我显然试图将标签居中放置在单元格中。由于某种原因,标签没有在单元格中居中:

我该怎么做才能解决这个问题?感谢您的支持。

确保标签中的文本居中对齐。它似乎是左对齐的,尽管标签本身是居中的。

cellLabel.textAlignment = NSTextAlignmentCenter;

在 swift 中将是:

cellLabel.textAlignment = NSTextAlignment.Center 

或者只是

cellLabel.textAlignment = .center