2013-09-22 31 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