IOS - настройка/изменение размера изображения UITableViewCell

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

Это то, что я делаю: cell.imageView.image = [UIImage imageNamed:@"test2.jpeg"];

И вот что это выглядит: enter image description here

Я пытаюсь заставить его выглядеть так: enter image description here

Как изменить размер изображения ячейки таблицы, чтобы получить желаемый результат?

Update

Это то, что я попытался предложить в ответах ниже:

cell.imageView.frame = CGRectMake(0.0f, 0.0f, 30.0f, 30.0f);
cell.imageView.layer.cornerRadius = 8.0;
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
cell.imageView.layer.masksToBounds = YES;
cell.imageView.image = [UIImage imageNamed:@"test2.jpeg"];

но все же вывод, который я получаю, это:

enter image description here

Обновление 2.0

Я попробовал несколько других способов:

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)];
imageView.backgroundColor = [UIColor clearColor];
[imageView.layer setCornerRadius:8.0f];
[imageView.layer setMasksToBounds:YES];
[imageView setImage:[UIImage imageNamed:@"test2.jpeg"]];
[cell.contentView addSubview:imageView];

но теперь я получаю следующее: enter image description here

Ответ 1

Сначала вам нужно установить изображение ячейки в максимальный размер, который вы хотите. Затем запустите через Interface Builder или с помощью кода, в котором у вас есть правильный режим содержимого:

cell.imageView.contentMode = UIViewContentModeScaleAspectFit;

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

Jackson опубликовано хорошее изображение, отображающее режимы содержимого здесь:

enter image description here

Для угла вам понадобится QuartzCore, и вы можете установить его с помощью этого кода:

#import <QuartzCore/QuartzCore.h>

...

cell.imageView.layer.cornerRadius = 4;
cell.imageView.layer.masksToBounds = YES;

UPDATE

Если ваш imageView не является выходом, вам лучше добавить одно изображение. Посмотрите на камеру. Вы можете (и вы должны) сделать это через раскадровку /xib. Этот учебник может помочь вам в этом, хотя их много в Интернете. fooobar.com/questions/64480/... дает другие решения этой проблемы.

Ответ 2

Я провел последние несколько часов, выясняя, как это сделать, поэтому я поделюсь тем, что нашел. Ваш код из Update 2.0 - хороший старт:

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)];
imageView.backgroundColor = [UIColor clearColor];
[imageView.layer setCornerRadius:8.0f];
[imageView.layer setMasksToBounds:YES];
[imageView setImage:[UIImage imageNamed:@"test2.jpeg"]];
[cell.contentView addSubview:imageView];

Вы можете использовать номера в первой строке, чтобы изображение отображалось там, где оно вам нужно; для моих целей я использовал (20, 5, 40, 40).

Добавьте эту строку до [cell.contentView addSubview:imageView]:

[imageView setTag:99];

Нам нужен этот тег, чтобы определить, какой подпункт мы только что добавили. Если вы не удаляете изображение каждый раз, когда вы перезагружаете ячейку, изображения начнут накапливаться там. Для вашего случая это не имеет большого значения, потому что он будет продолжать использовать один и тот же образ, поэтому он будет выглядеть одинаково. Однако, если вы получаете пользователя, которому нравится многократно прокручивать вверх и вниз, вы можете столкнуться с проблемами с парой сотен или более загруженных изображений. И если ваши ячейки будут иметь разные изображения, они начнут отображаться друг над другом, что будет выглядеть очень плохо, если они будут разных размеров. Поэтому перед инициализацией *imageView запустите этот цикл:

for (UIImageView *subview in cell.contentView.subviews)
{
    if (subview.tag == 99)
    {
        [subview removeFromSuperView];
    }
}

С помощью этого кода ваше изображение должно выглядеть так же, как в версии 2.0, но оно должно работать лучше. Чтобы переместить текст, используйте cell.indentationLevel и cell.indentationWidth. Убедитесь, что ваш стиль ячейки установлен на "базовый" (он похож на ваш) и где-то перед тем, как вы вернете свою ячейку, используйте

cell.indentationWidth = 10; // The amount each indentation will move the text
cell.indentationLevel = 7;  // The number of times you indent the text

поэтому этот код будет перемещать текст более 10 баллов 7 раз. Вы можете играть с ним, пока не получите правильное представление; это то, что я использовал в своем проекте. Надеюсь, это поможет!

Ответ 3

Лучший способ реализовать это - добавить ниже, где вы вызываете cell.imageView.image

cell.imageView.contentMode = UIViewContentModeScaleAspectFill;

Для закругленных углов #import <QuartzCore/QuartzCore.h>

cell.imageView.layer.cornerRadius = 8.0;

Ответ 4

Можете ли вы сами отредактировать изображение? Попробуйте отредактировать изображение по размеру, который вы хотите, и вручную закруглите углы. Затем вызовите

  cell.imageView.image = [UIImage imageNamed:@"test3.jpeg"];