Изменить размер ячейки табличного представления в методе cellForRowAtIndexPath - PullRequest
0 голосов
/ 27 мая 2011

У меня есть таблица, каждая ячейка с изображением, заголовком и подзаголовком. Каждая ячейка имеет свое изображение, и я не могу понять, как заставить их правую сторону выровняться друг с другом. Другими словами, некоторые шире, чем другие, и торчат справа от ячейки, толкая заголовок и субтитры. Мне все равно, есть ли черные полосы справа и слева или сверху и снизу, я просто хочу, чтобы они занимали одинаковое количество места. Я пытался это мой метод viewforrowatindexpath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc]
                             initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    cell.textLabel.text = [[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] title];
    cell.detailTextLabel.text = (NSString *)[[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] location];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] imageURL]]];
    UIImage *theImage = [[UIImage alloc] initWithData:imageData];

    cell.imageView.frame = CGRectMake(0, 0, 20, 20);
    cell.imageView.image = theImage;
    cell.imageView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:1.0];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // return it
    return cell;
    [imageData release];
    [theImage release]; 
}

Я думал, что, установив рамку просмотра изображения ячейки, изображение поместится в нее, но добавление этой строки не изменится при запуске приложения? Есть ли способ сделать это в методе viewforrowatindexpath?

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Я понимаю, что вы не можете контролировать размеры изображений.

Я не пробовал, но вы можете попробовать:

cell.imageView.clipsToBounds;

В любом случае, если этот простой шаг не работает , вы можете попытаться установить размер изображения, прежде чем добавить его в cell.imageview.

Сначала Добавьте эту функцию в свой файл

- (UIImage *)resetImage:(UIImage*)originalImage {

    CGSize newSize = CGSizeMake(20, 20)
    CGRect imageRect = CGRectMake(0,0, newSize.width,newSize.height);

    UIGraphicsBeginImageContext(newSize);
    [originalImage drawInRect:SymbolRectangle];
    UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


    return theImage;
}

Секунда Установите изображение ячейки

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc]
                             initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    cell.textLabel.text = [[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] title];
    cell.detailTextLabel.text = (NSString *)[[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] location];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[mainDelegate.mapAnnotations objectAtIndex:indexPath.row] imageURL]]];
    UIImage *theImage = [[UIImage alloc] initWithData:imageData];


    cell.imageView.image = [self resetImage:theImage];
    cell.imageView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:1.0];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // return it
    return cell;
    [imageData release];
    [theImage release]; 
}

Теперь я должен признать, что я не рядом с xcode, чтобы проверить это, но я верю, что это направление крешение.

Удачи

0 голосов
/ 27 мая 2011

О.К. - Я думаю, это то, что вы ищете.

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {

UIImage *sourceImage = self;
UIImage *newImage = nil;

CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;

CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;

CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;

CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor < heightFactor) 
                scaleFactor = widthFactor;
        else
                scaleFactor = heightFactor;

        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;

        // center the image

        if (widthFactor < heightFactor) {
                thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        } else if (widthFactor > heightFactor) {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
}


// this is actually the interesting part:

UIGraphicsBeginImageContext(targetSize);

CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width  = scaledWidth;
thumbnailRect.size.height = scaledHeight;

[sourceImage drawInRect:thumbnailRect];

newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

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


return newImage ;
}

Я нашел это здесь - как пропорционально масштабировать uiimageview

...