Отключить сжатие фонового изображения ячейки — Objective-C (Xcode)

#ios #objective-c #uitableview

#iOS #objective-c #uitableview

Вопрос:

Я добавляю содержимое в UITableViewCell, используя следующий код:

 NSManagedObject *device = [self.devices objectAtIndex:indexPath.row];
[cell.textLabel setText:[NSString stringWithFormat:@"%@", [device valueForKey:@"title"]]];
[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[[cell textLabel] setTextColor:[UIColor whiteColor]];
cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:[device valueForKey:@"imagename"]] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
  

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

Ответ №1:

Используйте [UIView setContentMode:]

Режимы, указанные ниже:

 typedef NS_ENUM(NSInteger, UIViewContentMode) {
UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparent
UIViewContentModeScaleAspectFill,     // contents scaled to fill with fixed aspect. some portion of content may be clipped.
UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)
UIViewContentModeCenter,              // contents remain same size. positioned adjusted.
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
};
  

Вы можете использовать TopLeft.

Добавлено:

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

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

 UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[device valueForKey:@"imagename"]]];
[iv setContentMode:UIViewContentModeTop];
[iv setClipsToBounds:YES];
cell.backgroundView = iv;
  

Измените последнюю строку кода на эту и попробуйте.

Комментарии:

1. ОК. Я новичок в программировании на iOS. Это еще одна строка кода или продолжение моей последней строки?

2. Ах, вы используете растягиваемое изображение. Обязательно ли это? Если это так, я отредактирую свой ответ.

3. Нет. Не требуется. Это было единственное, что я знал, что нужно вставить туда для форматирования изображения. Можете ли вы обновить информацию о том, как добавлять в код UIView при удалении растягиваемого изображения?

4. Добавлено, что вы изменили код. Фон ячейки теперь пустой. Нужно ли было применять этот новый код к фону ячейки?

5. Это так. Я добавил еще одну строку, чтобы установить вид изображения в качестве фона ячейки. Моя ошибка.