Изменение границ imageView UITableViewCell

Я пытаюсь поместить изображения различного размера внутри imageView UITableViewCell. Я получаю данные изображения asynch'ly, создаю изображение, устанавливаю режим содержания imageView и наконец устанавливаю границы imageView. Но код кажется нечувствительным к любым изменениям, которые я внес. Я хочу, чтобы изображения центрировались в 75x75 область. Я записал ниже кода с этой целью

UIImage* image = [UIImage imageWithData:data];
[holder.imageView setContentMode:UIViewContentModeCenter || UIViewContentModeRedraw];
[holder.imageView setImage:image];
[holder.imageView setBounds:CGRectMake(0,0,75,75)];
[holder.imageView setFrame:CGRectMake(0,0,75,75)];
[holder setNeedsLayout]; 

Где держателем является UITableViewCell. Результатом, который я получаю, всегда является то же. Все изображения имеют 75 пкс высотой и различные ширины. Кто-то может помочь мне решить эту проблему?

Я понял, что установка contentMode и ограничивает свойства, не имеет никакого эффекта в том коде. Я добавил NSLog после последней строки и получил результаты как указано ниже:

NSLog(@"imageview:%@ bounds and contentMode:%@ %@",[holder imageView],[holder.imageView bounds],[holder.imageView contentMode]);

imageview: <UIImageView: 0x39ab8a0; структурируйте = (0 0; 75 75); непрозрачный = НЕТ; userInteractionEnabled = НЕТ; слой = <CALayer: 0x39a92b0>> границы и contentMode: (пустой указатель) (пустой указатель)

Все еще никакое решение

10
задан Behlül Uçar 28 June 2010 в 10:15
поделиться

3 ответа

Готово, я наконец нашел решение, это стоило мне 3 часа, хотя =)

Решение состоит в том, чтобы изменить свойства, такие как bound,frame,contentMode в методе -(void)layoutSubviews пользовательского класса UITableViewCell. «Хитрость» заключается в том, чтобы написать код макета в этом методе, иначе код не будет иметь никакого эффекта.

Приведенный ниже код сделал работу за меня. Это делает строки таблицы вертикально выровненными.

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.bounds = CGRectMake(0,0,75,75);
    self.imageView.frame = CGRectMake(0,0,75,75);
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

    CGRect tmpFrame = self.textLabel.frame;
    tmpFrame.origin.x = 77;
    self.textLabel.frame = tmpFrame;

    tmpFrame = self.detailTextLabel.frame;
    tmpFrame.origin.x = 77;
    self.detailTextLabel.frame = tmpFrame;

}
42
ответ дан 3 December 2019 в 13:19
поделиться

попробуйте изменить свойство «contentMode» объекта imageView на «UIViewContentModeScaleAspectFit» или «UIViewContentModeScaleAspectFill»

1
ответ дан 3 December 2019 в 13:19
поделиться

«UIViewContentModeCenter || UIViewContentModeRedraw» эквивалентно 1. Это также не битовое поле. Вам нужен UIViewContentModeCenter.

UITableViewCell.imageView управляется ячейкой. Если вам нужен настраиваемый макет, попробуйте добавить представление в contentView (я догадываюсь, что вы имеете в виду под «центром в области 75x75»):

UIImageView * iv = [[[UIImageView alloc] initWithImage:image] autorelease];
iv.frame = (CGRect){{0,0},{75,75}};
iv.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin| UIViewAutoresizingFlexibleRightMargin;
iv.contentMode = UIViewContentModeScaleAspectFit;
[holder.contentView addSubview:iv];
2
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: