Подтвердить что ты не робот

UITableViewCell imageView подходит для 40x40

Я использую те же большие изображения в tableView и detailView. Необходимо сделать imageView заполненным 40x40, когда imags отображается в tableView, но растягивается на половину экрана. Я играл с несколькими свойствами, но не имел положительного результата:

[cell.imageView setBounds:CGRectMake(0, 0, 50, 50)];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView setContentMode:UIViewContentModeScaleAspectFill];

Я использую SDK 3.0 со сборкой в ​​ "Объекты ячейки в предопределенных стилях".

4b9b3361

Ответ 1

Я ставлю код Ben как расширение в файле NS-Extensions, чтобы я мог показать любому изображению, чтобы сделать его миниатюру, например:

UIImage *bigImage = [UIImage imageNamed:@"yourImage.png"];
UIImage *thumb = [bigImage makeThumbnailOfSize:CGSizeMake(50,50)];

Вот .h файл:

@interface UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size;
@end

а затем в файле NS-Extensions.m:

@implementation UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size
{
    UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
    // draw scaled image into thumbnail context
    [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();        
    // pop the context
    UIGraphicsEndImageContext();
    if(newThumbnail == nil) 
        NSLog(@"could not scale image");
    return newThumbnail;
}

@end

Ответ 2

Я кэширую миниатюру, так как использование больших изображений, уменьшенных на лету, использует слишком много памяти.

Вот мой миниатюрный код:

- (UIImage *)thumbnailOfSize:(CGSize)size {
    if( self.previewThumbnail )
        return self.previewThumbnail; // returned cached thumbnail

    UIGraphicsBeginImageContext(size);

    // draw scaled image into thumbnail context
    [self.preview drawInRect:CGRectMake(0, 0, size.width, size.height)];

    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();    

    // pop the context
    UIGraphicsEndImageContext();

    if(newThumbnail == nil) 
        NSLog(@"could not scale image");

    self.previewThumbnail = newThumbnail;

    return self.previewThumbnail;
}

Просто убедитесь, что вы правильно очистили кеш файл, если вы изменили исходное изображение (self.preview в моем случае).

Ответ 3

У меня есть моя оболочка в UIView и используйте этот код:

imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;

(self - это оболочка UIView, с размерами, которые я хочу - я использую AsyncImageView).

Ответ 4

Я думал, что предложение Бена Лахмана по созданию эскизов заранее, а не на лету, было умным, поэтому я адаптировал его код, чтобы он мог обрабатывать целый массив и сделать его более портативным (без жестко закодированных имен свойств).

- (NSArray *)arrayOfThumbnailsOfSize:(CGSize)size fromArray:(NSArray*)original {
    NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[original count]];
    for(UIImage *image in original){
        UIGraphicsBeginImageContext(size);
        [image drawInRect:CGRectMake(0,0,size.width,size.height)];
        UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [temp addObject:thumb];
    }
    return [NSArray arrayWithArray:temp];
}

Ответ 5

вы могли бы использовать это?

yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];

и/или

cell.image = yourTableViewController.rowImage;

и если ваши изображения уже 40x40, вам не придется беспокоиться о настройке границ и прочее... но я тоже новичок в этом, поэтому, я бы не знал, не играл с Таблица Просмотр изображений строк/ячеек значительно

надеюсь, что это поможет.

Ответ 6

Я смог выполнить эту работу с помощью конструктора интерфейсов и tableviewcell. Вы можете установить свойства "Режим" для изображения на "Аспект Fit". Я не уверен, как это сделать программно.

Ответ 7

Попробуйте установить UIImageView.autoresizesSubviews и/или UIImageView.contentStretch.