与Safari相比,为什么UIImageView显示的图像很小?

时间:2017-10-22 11:08:35

标签: ios objective-c uitableview uiimageview uiimage

我有一个简单的自定义单元格,其中UIImageView从Internet加载图片如下

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 static NSString *CellIdentifier = @"shopifyCell";
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

 NSDictionary *dict = [_shopifyCollections objectAtIndex:indexPath.row];

 // Configure the cell...
 //[cell.textLabel setText:[NSString stringWithFormat:@"%@", [dict objectForKey:@"description"]]];

 NSURL *url = [[NSURL alloc]initWithString:[dict objectForKey:@"imageUrl"]];
 NSData *data =[NSData dataWithContentsOfURL:url];
 cell.imageView.image = [UIImage imageWithData:data];

 return cell;

问题在于它显示的非常小(约0.5cmx0.5cm),但是如果我在同一部iPhone上的safari中打开相同的链接,它会显示更大的尺寸。

我尝试在故事板中调整UIImage的大小,并调整自动布局约束,但它没有效果,所以我必须在这里遗漏一些东西。

如何在自定义单元格中控制UIImageView的大小,使其达到我想要的大小,与同一图像的Web视图更相似?

编辑***

我尝试按如下方式添加contentMode,但没有任何更改

NSURL *url = [[NSURL alloc]initWithString:[dict objectForKey:@"imageUrl"]];
 NSData *data =[NSData dataWithContentsOfURL:url];
 cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
 cell.imageView.image = [UIImage imageWithData:data];

编辑2 ***

通过不映射正确的单元来修复一些错误,这现在可以水平但不垂直,为什么我现在可以在X方向但不在Y方向上缩放它?

NSURL *url = [[NSURL alloc]initWithString:[dict objectForKey:@"imageUrl"]];
 NSData *data =[NSData dataWithContentsOfURL:url];
 cell.shopifyCellMainImage.contentMode = UIViewContentModeScaleAspectFill;
 cell.shopifyCellMainImage.image = [UIImage imageWithData:data];

1 个答案:

答案 0 :(得分:0)

以下是如何将表格单元格调整为图像的工作示例。我们的想法是预加载图像并使用它们的高度来计算tableView:tableView heightForRowAtIndexPath:中的精确单元格高度。我们还使用UIViewContentModeScaleAspectFit来获得正确的结果。

#import "TableViewController.h"
#import "TableViewCell.h"

@implementation TableViewController {

    IBOutlet UITableView *_tableView;

    CGFloat _imgViewWidth;

    NSArray *_urls;
    NSMutableArray<UIImage *> *_images;

}

- (void)viewDidLoad {
    [super viewDidLoad];

    _urls = @[@"http://gzsihai.com/data/out/180/im-502387394.jpg",
              @"http://s.chzbgr.com/s/unversioned/images/square_logos/PictureIsUnrelated.png",
              @"https://pbs.twimg.com/profile_images/794708906094317572/Bb8lpZ2t.jpg"];
    _images = [NSMutableArray new];

    for (NSString *urlStr in _urls) {
        NSURL *url = [[NSURL alloc] initWithString:urlStr];
        NSData *data =[NSData dataWithContentsOfURL:url];
        [_images addObject:[UIImage imageWithData:data]];
    }

    TableViewCell *cell = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(TableViewCell.class) owner:self options:nil][0];
    _imgViewWidth = cell.imgView.frame.size.width;

    [_tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"reuseIdentifier"];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [_tableView reloadData];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _urls.count;
}

- (TableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *reuseIdentifier = @"reuseIdentifier";

    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];
    cell.imgView.image = _images[indexPath.row];
    cell.imgView.contentMode = UIViewContentModeScaleAspectFit;

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat imgWidth = _images[indexPath.row].size.width;
    CGFloat scaleFactor = (imgWidth < _imgViewWidth) ? 1. : _imgViewWidth / imgWidth;

    return _images[indexPath.row].size.height * scaleFactor;
}

@end