У меня есть несколько изображений, которые я использую для просмотра изображений в ячейках, все они не больше 50x50. например 40x50, 50x32, 20x37 .....
Когда я загружаю табличное представление, текст не выравнивается, потому что ширина изображений меняется. Также я хотел бы, чтобы маленькие изображения появлялись в центре, а не слева.
Вот код, который я пытаюсь использовать в своем методе cellForRowAtIndexPath
cell.imageView.autoresizingMask = ( UIViewAutoresizingNone );
cell.imageView.autoresizesSubviews = NO;
cell.imageView.contentMode = UIViewContentModeCenter;
cell.imageView.bounds = CGRectMake(0, 0, 50, 50);
cell.imageView.frame = CGRectMake(0, 0, 50, 50);
cell.imageView.image = [UIImage imageWithData: imageData];
Как видите, я пробовал несколько вещей, но ни один из них не помог.
self.imageView.bounds
изображение будет по центру.UITableViewCell
?Для тех из вас, у кого нет подкласса
UITableViewCell
:Приведенный выше код устанавливает размер 40x40.
Swift 2
Или вы можете использовать другой (не проверенный) подход, предложенный @Tommy:
Swift 3+
Приведенный выше код является версией вышеприведенного Swift 3+.
источник
UIScreen.mainScreen.scale
поэтому я просто пошелUIGraphicsBeginImageContext
. Также изменил размер imageView в базовой ячейке.Вот как я это сделал. Этот метод заботится о перемещении текста и детальных текстовых меток влево:
источник
представление изображения добавить как дополнительное представление в ячейку представления таблицы
источник
Не нужно переделывать всю клетку. Вы можете использовать свойства indentationLevel и indentationWidth для tableViewCells, чтобы сместить содержимое вашей ячейки. Затем вы добавляете свой собственный imageView в левую часть ячейки.
источник
Лучше создать представление изображения и добавить его как вспомогательное представление в ячейку, тогда вы сможете получить желаемый размер кадра.
источник
Просто быстрый ,
Шаг 1: Создайте один подкласс
UITableViewCell
Шага 2: добавьте этот метод в подкласс UITableViewCell
Шаг 3: Создайте объект ячейки, используя этот подкласс в
cellForRowAtIndexPath
,Шаг 4: наслаждайтесь
источник
источник
Это сработало для меня быстро:
Создайте подкласс UITableViewCell (убедитесь, что вы связали свою ячейку в раскадровке)
В cellForRowAtIndexPath удалите ячейку из очереди как новый тип ячейки:
Очевидно, измените числовые значения в соответствии с вашим макетом
источник
Я создал расширение, используя ответ @GermanAttanasio. Он предоставляет метод для изменения размера изображения до желаемого размера и другой метод, позволяющий сделать то же самое при добавлении прозрачного поля к изображению (это может быть полезно для представлений таблиц, где вы хотите, чтобы изображение также имело поле).
источник
Вот метод работы @germanattanasio, написанный для Swift 3
источник
Если вы используете,
cell.imageView?.translatesAutoresizingMaskIntoConstraints = false
вы можете установить ограничения для imageView. Вот рабочий пример, который я использовал в своем проекте. Я избегал подклассов и мне не нужно было создавать раскадровку с ячейками прототипа, но мне потребовалось довольно много времени, чтобы начать работу, поэтому, вероятно, лучше всего использовать только в том случае, если для вас нет более простого или краткого способа.источник
Обычный UITableViewCell хорошо подходит для позиционирования, но cell.imageView, похоже, не ведет себя так, как вы этого хотите. Я обнаружил, что достаточно просто заставить UITableViewCell правильно разложить, сначала предоставив cell.imageView изображение правильного размера, например
Затем вы можете просто подключить свой собственный правильно работающий UIImageView с
Установите изображение в anImageView, и оно будет делать то, что вы ожидаете от UIImageView. Будьте того размера, который вам нужен, независимо от изображения, которое вы ему даете. Это должно быть в tableView: cellForRowAtIndexPath:
источник
Это решение по существу рисует изображение как «подходящее по размеру» внутри заданного прямоугольника.
источник
У меня такая же проблема. Спасибо всем, кто ответил - я смог найти решение, используя части нескольких из этих ответов.
Мое решение использует Swift 5
Проблема, которую мы пытаемся решить, заключается в том, что у нас могут быть изображения с разным соотношением сторон в наших
TableViewCell
s, но мы хотим, чтобы они отображались с одинаковой шириной. Разумеется, изображения должны отображаться без искажений и заполнять все пространство. В моем случае меня вполне устраивало «обрезка» высоких тонких изображений, поэтому я использовал режим содержимого.scaleAspectFill
Для этого я создал собственный подкласс
UITableViewCell
. В моем случае я назвал этоStoryTableViewCell
. Ниже вставлен весь класс со встроенными комментариями.Этот подход сработал для меня, когда я также использовал настраиваемый вид аксессуаров и длинные текстовые метки. Вот изображение окончательного результата:
Визуализированное табличное представление с постоянной шириной изображения
источник
Решение, к которому мы пришли, похоже на многие другие. Но чтобы получить правильное положение разделителя, мы должны были установить его перед вызовом
super.layoutSubviews()
. Упрощенный пример:источник