0

在我的表格视图的cellForRowAtIndexPath:方法中,我有以下代码来添加图像并在单元格中对齐它:

        UIImageView *PocketIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pocket-icon"]];
        [cell addSubview:PocketIcon];

        NSLayoutConstraint *iconDistanceFromCellTopConstraint = [NSLayoutConstraint constraintWithItem:PocketIcon attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeTop multiplier:1.0 constant:14.0];
        [cell addConstraint:iconDistanceFromCellTopConstraint];

        NSLayoutConstraint *iconDistanceFromCellLeftConstraint = [NSLayoutConstraint constraintWithItem:PocketIcon attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeLeft multiplier:1.0 constant:22.0];
        [cell addConstraint:iconDistanceFromCellLeftConstraint];

然而,每次确实添加了图像,但它只是位于单元格的左上角。导致约束不起作用的上述代码有什么问题?

4

2 回答 2

3

设置translatesAutoresizingMaskIntoConstraints为 NO 后,您的代码对我有用:

UIImageView *PocketIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pocket-icon"]];
PocketIcon.translatesAutoresizingMaskIntoConstraints = NO;
[cell addSubview:PocketIcon];

我想给的另一个小建议。我广泛使用约束,在我开始使用类别来处理约束后,我的生活变得更加轻松,这个:

https://github.com/PureLayout/PureLayout

我建议你也试试。

于 2013-10-17T19:50:11.503 回答
2

因此,将您的 imageView 和约束添加到 cell.contentView 而不是 cell ( [cell.contentView addSubview:PocketIcon];)。您还想关闭 AutoresizingMask,所以添加这个[PocketIcon setTranslatesAutoresizingMaskIntoConstraints:NO]. 您可能需要一个 bool 来确保在滚动表格时不要多次添加约束。

于 2013-10-17T19:51:03.447 回答