我有一个简单的自定义单元格,其中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];
答案 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