2017-10-22 1 views
0

나는왜 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에 대해) 매우 작은 나타나는지 같이 인터넷에서 사진을로드하는 UIImageView에 간단한 사용자 정의 셀을 가지고,하지만 난 같은 링크를 열 경우 동일한 iPhone에서 Safari를 사용하면 훨씬 더 큰 크기로 표시됩니다.

스토리 보드에서 UIImage의 크기를 조정하고 자동 레이아웃 제약 조건을 조정하려고했지만 영향이 없어서 여기에 뭔가 빠져 있어야합니다.

사용자 정의 셀에있는 UIImageView의 크기를 제어하여 동일한 이미지의 웹보기와 더 비슷한 원하는 크기로 만들 수 있습니까? 아무것도 올바른 셀을 매핑하지 몇 가지 실수를 고정

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

편집 2 ***

을 변경 없지만 다음과 같이

편집 ***

나는이 이제 contentMode을 추가하는 시도 가로로 움직이는데 세로로 움직이지 않는데 왜 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

UIViewContentMode 속성을 사용하십시오. –

+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 
관련 문제