2013-09-22 9 views
14

UIImageViewオブジェクトに自動レイアウトが設定されています。ビューがスーパービューと一定の距離を保つように制約を作成しました。視覚的な形式では、それは次のようになります:UIViewのcontentModeプロパティと自動レイアウト制約を組み合わせる方法

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

しかし、私はまた、下にある画像の縦横比を維持したいと思いますので、私はcontentModeUIViewContentModeScaleAspectFitを割り当てました。画像ビューのサイズが変更されたときに今

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

、例えば:

は私が関連するCALayercornerRadius値を設定するまで、すべてがうまく働いていたと思いました向きの変更のために、ビューが取得する新しいサイズに応じて丸い角が失われます。

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

がある:その理由はcornerRadius(下記ダッシュフレーム)UIImageViewに適用されるが、下にある画像もcontentMode(以下アスタリスクでフレーム)を尊重するためにリサイズされているので、角部はもう見えない丸みを帯びていることですこの動作を防ぐ方法?

答えて

0

すばやく1つの方法は、UIImageViewをサブクラス化し、角の半径をlayoutSubviewsに設定することです。

27

@ jacob-kのように、セルサブクラスlayoutSubviewsに追加する必要がありますが、追加するにはlayoutIfNeededを最初に呼び出す必要があります。

例:

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

あなたはそれがあなたのセットの制約を受けることなく、すべての変更を適用し、最初のlayoutIfNeededを呼び出ししません。

+1

ありがとうございます。チャームのように働く。長い間苦労している。 –

+0

これはUITableViewCellの場合にのみ機能します。これは、contentviewではなくtableviewセルに制約を付加する場合のみです。 (ビューをcontentViewに追加することができます –

+0

uitableviewcellのすべてのサイズクラスに対して複雑な制約がある場合はこれがソリューションです – khunshan

関連する問題