UITableViewCell内的NSLayoutConstraint崩溃应用程序

时间:2015-06-26 17:01:23

标签: ios objective-c uitableview nsautolayout

我正在尝试使用UITableViewCell将图像放在NSLayoutConstraint的中心。我正在使用下面的代码:

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:self.image
                                  attribute:NSLayoutAttributeWidth
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:cell.contentView
                                  attribute:NSLayoutAttributeWidth
                                 multiplier:1
                                   constant:200];
[self.image addConstraint: cn];

cn = [NSLayoutConstraint constraintWithItem:self.image
                                  attribute:NSLayoutAttributeHeight
                                  relatedBy:NSLayoutRelationEqual
                                     toItem:cell.contentView
                                  attribute:NSLayoutAttributeHeight
                                 multiplier:1
                                   constant:200];
[self.image addConstraint:cn];

另外,我希望图像为UITableViewCell高度的80%并具有相同的宽度 - 所以它是方形的。但是,目前我的应用程序崩溃并抛出此错误:Impossible to set up layout with view hierarchy unprepared for constraint.

我做错了什么?

2 个答案:

答案 0 :(得分:1)

事实证明,我必须将图像添加到cell.contentView,以便它实际上可用作子视图。

这是完成的工作代码:

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:self.image
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:cell.contentView
                                                          attribute:NSLayoutAttributeHeight
                                                         multiplier:0.7
                                                           constant:0];
    [cell.contentView addConstraint: cn];

    cn = [NSLayoutConstraint constraintWithItem:self.image
                                      attribute:NSLayoutAttributeWidth
                                      relatedBy:NSLayoutRelationEqual
                                         toItem:cell.contentView
                                      attribute:NSLayoutAttributeHeight
                                     multiplier:0.7
                                       constant:0];
    [cell.contentView addConstraint:cn];

    NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:self.image attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0];
    NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:self.image attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0];
    [cell.contentView addConstraint:constraintX];
    [cell.contentView addConstraint:constraintY];

答案 1 :(得分:0)

究竟什么是“self.image”指的是什么?它是View Controller的属性(这肯定是错误的)?在我看来它应该是“cell.image”,你的每个单元格都应该拥有它自己对图像的引用。