2017-10-22 2 views
0

Ich habe eine einfache benutzerdefinierte Zelle mit einem UIImageView ein Bild aus dem Internet laden alsWarum zeigt UIImageView im Vergleich zu Safari ein kleines Bild?

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

Das Problem folgt, ist, dass es sehr klein erscheint (etwa 0.5cmx0.5cm), aber wenn ich öffnen Sie den gleichen Link in Safari auf dem gleichen iPhone zeigt es sich in viel größerem Umfang.

Ich habe versucht, die Größe der UIImage im Storyboard und auch die Auto-Layout-Einschränkungen anzupassen, aber es hatte keine Auswirkungen, so dass ich etwas hier fehlen muss.

Wie kann ich die Größe der UIImageView in meiner benutzerdefinierten Zelle steuern, um es zu der gewünschten Größe zu machen, die der Webansicht des gleichen Bildes ähnlicher ist?

EDIT ***

habe ich versucht, die contentMode Zugabe wie folgt aber nichts

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

EDIT 2 ändert ***

einige Fehler mit nicht Abbilden der richtigen Zell Festsetzung dieses jetzt funktioniert horizontal aber nicht vertikal, warum kann ich es jetzt in X-Richtung skalieren, aber nicht in Y-Richtung?

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

Verwenden Sie die UIViewContentMode-Eigenschaft. –

+0

Ok, aber wie genau? –

Antwort

0

Hier ist ein Arbeitsbeispiel zum Anpassen von Tabellenzellen an Bilder. Die Idee ist, Bilder vorab zu laden und ihre Höhen zu verwenden, um genaue Zellenhöhe in tableView:tableView heightForRowAtIndexPath: zu berechnen. Wir verwenden auch UIViewContentModeScaleAspectFit, um korrekte Ergebnisse zu erhalten.

#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 
Verwandte Themen