2012-08-31 59 views
3

tableView:cellForRowAtIndexPath中,我將imageView.image設置爲1x1或60x60佔位符圖像,而單元格的高度爲300.我還將imageView.frame設置爲(0,0, 300, 300)如何使UITableView不改變imageView的框架,或調整圖像大小來填充框架大小?

然後我打電話給方法downloadImageFromURL:andSetIntoCell,它立即添加一個UIActivityIndicatorView並將幀設置爲(0,0, 300, 300)(下載在一個線程中異步完成,並且該方法不會等待下載,而只是立即返回)。

但是,在tableView:cellForRowAtIndexPath返回單元格之後,調整imageView.frame以使原始60x60大小的圖像垂直居中。如果該佔位符圖像是800x800,實際上它工作正常:幀仍然是(0,0,300,300),圖像縮小了,但是當圖像是60x60時,幀實際上被調整爲類似於(0,120, 60,60),這是可以的,因爲佔位符是透明的,但UIActivityIndicatorView作爲imageView的子視圖被添加,因此被垂直推下,高度爲300並覆蓋下一行的一部分。

是否有辦法告訴UITableView不要更改imageView.frame,或者通過編程方式輕鬆地將圖像大小調整爲300x300(最好不要使用BitmapContext),或者要求imageView進行縮放以填充框架?

我說:

cell.imageView.contentMode = UIViewContentModeScaleToFill; 

設置imageView.frame,其正常工作,如果我在一個UIView拉伸之後,但UITableView中仍會顯示原來的60x60的大小,並調整imageView.frame垂直居中。

(我認爲在這種情況下,我只能讓UIActivityIndicatorView圖像的尺寸:60×60,但據說它是1x1透明圖像佔位符做)

更新:順便說一下,我甚至補充:返回電池

self.table.autoresizesSubviews = NO; 
self.table.autoresizingMask = UIViewAutoresizingNone; 

cell.autoresizesSubviews = NO; 
cell.autoresizingMask = UIViewAutoresizingNone; 

cell.imageView.autoresizesSubviews = NO; 
cell.imageView.autoresizingMask = UIViewAutoresizingNone; 

之前,它是一樣的:ImageView的重新定位和調整大小。

+0

我面臨同樣的問題。你是否能夠解決這個問題,如果是的話,那麼如何? – pkc456

回答

0

以後單元格的imageview框架不會改變。因此,我使用layoutSubviews解決此問題,如下所示: -

使用AFNetworking的方法設置圖像名爲setImageWithURLRequest:我使用64 * 64大小作爲示例。您可以更改適用於您的表格視圖的框架

NSURL *urlMapThumbnail = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/staticmap?zoom=8&size=65x65&maptype=roadmap&markers=color:red%7Clabel:S%7C28.5002761,77.08126909999999"]; 

__weak UITableViewCell *cellTemp = cell; 
[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:urlMapThumbnail] 
         placeholderImage:[UIImage imageNamed:@"sotrelocation"] 
           success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
            CGSize finalSize = CGSizeMake(64, 64); 
            image = [UIImage imageWithImage:image scaledToSize:finalSize]; 
            cellTemp.imageView.image = image; 
            [cellTemp layoutSubviews]; 
           } failure:nil]; 

//方法重新縮放圖像大小

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    //UIGraphicsBeginImageContext(newSize); 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
相關問題