UITableViewCell 圆角 imageView

Posted

技术标签:

【中文标题】UITableViewCell 圆角 imageView【英文标题】:UITableViewCell rounded imageView 【发布时间】:2014-01-26 00:45:29 【问题描述】:

我正在尝试制作一个在圆形 imageView 中包含图像但具有不同大小的图像的应用。我的目标是在图像太大时显示一小部分图像(这样图像看起来不会失真)。

我能够得到四舍五入的 imageView,但对于不同的图像,它的大小总是不同的——这不是我想要的。我在这里阅读了帖子:

UIImage with rounded corners

Using cornerRadius on a UIImageView in a UITableViewCell

我的一些代码用于 UITableViewCell(我对其进行了子类化):

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code
//        [self.imageView setContentMode:UIViewContentModeScaleAspectFill];

        self.imageView.contentMode = UIViewContentModeScaleAspectFit;
        self.imageView.bounds = CGRectMake(0, 0, 44,44);
        self.imageView.frame = CGRectMake(5, 10, 44, 44);

        CGRect frame = self.imageView.frame;
        self.imageView.layer.cornerRadius = 15;
        [self.imageView.layer setMasksToBounds:YES];
        self.imageView.clipsToBounds = YES;
    
    return self;

我正在使用SDWebImage 加载图像。我这里还有什么遗漏的吗?

【问题讨论】:

ios rounded corner UIImage with border的可能重复 【参考方案1】:

如果您使角半径数字与宽度或高度等成比例,那么这将为您提供恒定的图像圆度。这里我建议 div by 3 作为示例。

self.imageview.layer.cornerRadius = self.imageview.frame.size.width/3;

希望这就是你要找的。​​p>

干杯,吉姆

编辑 -

我看到您注释掉了 aspectFill,尽管这与 clipToBounds 或 MaskToBounds 应该提供您正在寻找的内容。所以通过改变

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

改成

self.imageView.contentMode = UIViewContentModeScaleAspectFill;

并保持 self.image.clipToBounds 线,应该是它。

干杯

【讨论】:

似乎不起作用。我的问题是图像大小不同,我希望它不会扭曲图像视图,并且它总是这样做。【参考方案2】:

您好,这是最好的解决方案,而且速度非常快:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        CALayer * l = [self layer];
        [l setMasksToBounds:YES];
        [l setCornerRadius:10.0];

        // You can even add a border
        [l setBorderWidth:self.frame.size.width/IMG_PROFILE_BORDER_SCALE];
        [l setBorderColor:[[UIColor grayColor] CGColor]];
    
    return self;

而且显然不要忘记导入 QuartzCore 框架:

#import <QuartzCore/QuartzCore.h>

但是,如果您有兴趣,我还在 GitHub 上创建了一个可用的对象来创建围绕图像着色的路径。这个解决方案使用 CoreGraphics,我认为它比上面的另一个慢:

GBPathImageView

【讨论】:

【参考方案3】:

UIViewContentModeScaleAspectFill 更适合您的需要,因为它可以将图像缩放到 填充 imageView 的大小,而不会改变宽高比。

但不要忘记将 imageView 的 clipsToBounds 设置为 YES,以便将剩余部分移出视图边界:

 [self.imageView setClipsToBounds:YES];

【讨论】:

【参考方案4】:

我找到了解决问题的方法。

出于某种奇怪的原因...我无法在UITableViewCell 上为imageView 使用不同的图像。我最终在imageView(透明png)中放置了一个占位符图像,然后在我的问题中使用相同的代码放置了我自己的UIImageView,它运行良好。 imageView 的计算方式有些奇怪。

【讨论】:

以上是关于UITableViewCell 圆角 imageView的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 圆角 imageView

使用 QuartzCore 对 UITableViewCell 内的 UIImageView 进行圆角时,滚动体验缓慢

Xamarin.iOS UITableViewCell ImageView 上的圆角

调整 UITableViewCell 的大小以适合标签或图像和圆角

iOS 11 中的 UITableViewCell 转换中断

MKMapView 的圆角