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

时间:2015-01-04 00:45:45

标签: ios uilabel uicollectionviewcell centering nslayoutconstraint

我有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方法的部分,我显然试图将标签置于单元格中心。由于某种原因,标签没有成为细胞的中心:

containerView cells with label

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

1 个答案:

答案 0 :(得分:2)

确保标签中的文字与中心对齐。虽然标签本身居中,但它似乎与左侧对齐。

cellLabel.textAlignment = NSTextAlignmentCenter;

在swift中它会是:

cellLabel.textAlignment = NSTextAlignment.Center 

或者只是

cellLabel.textAlignment = .center