UITableViewCell舍入了imageView

时间:2014-01-26 00:45:30

标签: ios objective-c uitableview

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

我能够获得圆形的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加载图片。我还缺少什么吗?

4 个答案:

答案 0 :(得分:1)

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

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

希望这是你正在寻找的。

干杯,吉姆

编辑 -

我看到你注释了aspectFill,尽管这有一个clipToBounds或MaskToBounds应该提供你正在寻找的东西。所以通过改变

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

更改为

self.imageView.contentMode = UIViewContentModeScaleAspectFill;

并保留self.image.clipToBounds行,这应该是它。

干杯

答案 1 :(得分:0)

嗨,这是最好的解决方案,非常快:

- (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

答案 2 :(得分:0)

UIViewContentModeScaleAspectFill更适合您的需求,因为它可以将图像缩放为填充 imageView的大小,而不会更改遮挡比率。

但不要忘记为imageView设置clipsToBoundsYES,以便从视图边界中删除其余部分:

 [self.imageView setClipsToBounds:YES];

答案 3 :(得分:0)

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

由于一些奇怪的原因......我无法在imageView上使用UITableViewCell的各种图片。我最终在imageView(透明png)中放置了一个占位符图像,然后我在我的问题中使用相同的代码放置了我自己的UIImageView,它运行正常。对imageView的计算方式做了一些奇怪的事。