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

Регулировка позиций меток в UITableViewCell

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

CGRect currRect = cell.detailTextLabel.frame;
cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.origin.y, currRect.size.width - 40, currRect.size.height);

Я попытался поместить этот код в оба метода tableView: cellForRowAtIndexPath и tableView: willDisplayCell: forRowAtIndexPath, но не работает. Метка просто остается там, где она есть, и того же размера.

Корректировка других свойств метки (textAlignment, backgroundColor и, конечно же, самого текста) работает правильно.

Как мне заставить detailTextLabel перемещаться туда, где мне нужно?

В случае, если это имеет значение (хотя я не понимаю, почему это необходимо), эта конкретная ячейка также имеет свойства imageView.image и backgroundImage. Оба изображения отображаются правильно.

4b9b3361

Ответ 1

Вам понадобится пользовательский подкласс UITableViewCell, который переопределяет layoutSubviews, чтобы выполнить грязную работу по выделению любых подпрограмм. Вызов супер, а затем настройка detailTextLabel.frame, вероятно, самая простая вещь.

Ответ 2

Вы можете попробовать и отрегулировать метку с уровнем отступов и отступов:

cell.indentationWidth = MY_DESIRED_WIDTH;
cell.indentationLevel = 1;

(для незакрепленных ячеек)

Или для выделенных ячеек просто выполните:

cell.indentationLevel = cell.indentationLevel + 1;

Оба эти должны сдвигать/отступать ваши метки.

Ответ 3

Или вы можете изменить ячейку из UITableViewCellStyleSubtitle, по умолчанию и добавить свои собственные объекты в cell.contentView и поместить их туда, где хотите. Вам необязательно подклассифицировать UITableViewCell (например, пользовательскую ячейку) или использовать layoutSubViews. Все это можно сделать в tableView: cellForRowAtIndexPath.

Ответ 4

Возможно, вы можете сделать это с помощью CGAffineTransform. (Непроверенный) код для нажатия detailTextLabel правых 10 пикселей выглядел бы примерно так:

CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0); 
[detailTextLabel setTransform:translate];

Пока вы можете сделать это, я думаю, вы будете счастливее создать свой собственный UITableViewCell.