2013-09-22 76 views
14

我有一個配置了自動佈局的UIImageView對象。我已經創建了約束,以便視圖與其超視圖保持恆定的距離。在視覺格式將是這樣的:如何將自動佈局約束與UIView的contentMode屬性結合起來

@"V:|-[imageView]-|" 
@"H:|-[imageView]-|" 

但我也想保持底層圖像的縱橫比,所以我分配給UIViewContentModeScaleAspectFitcontentMode

我想一切工作良好,直到我設置cornerRadius值相關聯的CALayer

self.imageView.layer.cornerRadius = 7; 
self.imageView.layer.maskToBounds = YES; 

現在,當圖像視圖的大小時,例如由於方向的改變,取決於視圖所獲得的新尺寸,圓角會丟失。其原因是,cornerRadius適用於UIImageView(框架下面劃線),但由於底層圖像也被調整爲尊重contentMode(以下星號幀),圓潤的邊角都不再可見:

-------------------------- 
|  **********  | 
|  *  *  | 
|  *  *  | 
|  *  *  | 
|  **********  | 
-------------------------- 

有一種防止這種行爲的方法?

回答

0

一個快速的方法可以將UIImageView子類化並設置角點半徑layoutSubviews

27

像@ jacob-k所說的,你應該添加到你的單元格子類layoutSubviews,但只是要添加你應該先撥layoutIfNeeded

例子:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    [self layoutIfNeeded]; 
    imageView.layer.cornerRadius = imageView.frame.size.width/2; 
} 

如果你不會叫layoutIfNeeded第一,然後將其應用於所有改動而不讓一組約束。

+1

謝謝..工作像一個魅力。掙扎了這麼久。 –

+0

只有當您將約束附加到tableview單元格而不是contentView時,才能爲UITableViewCell工作。 (仍然可以將視圖添加到contentView –

+0

如果您對uitableviewcell中的所有大小類都有複雜約束,則這是解決方案 – khunshan