【问题标题】:Why does UIImageView show image tiny compared to Safari?与 Safari 相比,为什么 UIImageView 显示的图像很小?
【发布时间】:2018-04-03 01:22:14
【问题描述】:

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

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

【问题讨论】:

  • 使用 UIViewContentMode 属性。
  • 好的,但具体如何?

标签: ios objective-c uitableview uiimageview uiimage


【解决方案1】:

这是一个如何将表格单元格调整为图像的工作示例。这个想法是预加载图像并使用它们的高度来计算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

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多