Подтвердить что ты не робот

Позиционирование изображенияПримечание UITableViewCell

В каждом UITableViewCell из UITableView я помещаю изображение в свой imageView. Однако, если я увеличиваю высоту ячейки с помощью tableView: heightForRowAtIndexPath: чтобы разместить больше текста, я обнаружил, что:

  • Изображение выравнивается по центру по вертикали.
  • Левый край изображения увеличивается. Это подталкивает текст так, чтобы его левое поле больше не выравнивалось с текстом в ячейках выше и ниже.

Я хотел бы, чтобы изображение было выровнено по вертикали, так что оно находится в верхнем левом углу ячейки (например, первая ячейка на изображении ниже) и не имеет увеличенного левого поля (так что левое поле текста во второй ячейке выравнивается с текстом в первой ячейке).

Изменение рамки, центра и т.д. изображения, похоже, не влияет. Есть идеи? Спасибо...

(У меня есть изображение проблемы, но SO не позволит мне опубликовать изображение еще, потому что я ноб с менее чем 10 репутацией. Grrr...)

4b9b3361

Ответ 1

Вам нужно подклассифицировать UITableViewCell и переопределить layoutSubviews следующим образом:

- (void) layoutSubviews
{   
    [super layoutSubviews];

    self.imageView.frame = CGRectMake( 10, 10, 50, 50 ); // your positioning here
}

В вашем методе cellForRowAtIndexPath: обязательно верните экземпляр вашего нового типа ячейки.

Ответ 2

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

Ответ 3

Другой способ (работает в iOS 6) - создать UIImageView и добавить его в ячейку в качестве подвью

 UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,20,20)];

[yourImageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]]]; //You can have an Array with the name of 

[yourcell.contentView addSubview:yourImageView]; //add the imageView as a subview

Ответ 4

Действительно полезная функция, которую вы, возможно, не пробовали (в UITableViewDelegate), это tableView:willDisplayCell:forRowAtIndexPath:. Он вызывается непосредственно перед отображением ячейки, и ее цель - дать вам возможность сделать что-то в макете без изменения ОС перед ее отображением. Эффективно у вас есть полный контроль. Я использовал его для изменения шрифтов в ячейках, но вы можете перебирать подзоны ячеек и изменять их фреймы.

Тем не менее я согласен, что вы находитесь в точке, где пришло время заглянуть в пользовательские ячейки и прекратить борьбу с ОС. Это не сложно, и Apple дает хороший пример в Руководство по программированию таблиц для iOS.

Ответ 5

Вы можете создать пользовательскую ячейку и поместить объекты, в которых они вам нужны, а также установить значения автоматической маски.

Ответ 6

Вариант решения TomSwift Swift 4 (который мне очень понравился):

override public func layoutSubviews() {
        super.layoutSubviews()
        imageView?.frame = CGRect( x: 16, y: 9, width: imageView!.intrinsicContentSize.width, height:  imageView!.intrinsicContentSize.height)
    }