2015-06-26 39 views
1

我試圖定位在UITableViewCellNSLayoutConstraint s中心的圖像。我使用下面的代碼爲:NSLayoutConstraint裏面的UITableViewCell崩潰的應用程序

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.

我在做什麼錯?

+0

最好應該添加約束'cell.contentView',不'self.image'。但不知道。搜索錯誤也提供了許多線索,也在SO上。 – user3125367

回答

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]; 
+0

謝謝隊友! :d – Devhess

0

到底什麼是「self.image」?它是你的視圖控制器的屬性(這肯定是錯誤的)?在我看來,它應該是「cell.image」,其中你的每個單元格都應該有它自己對圖像的引用。

+0

這是添加到單元格的圖像(個人資料圖片)。 – user4992124