Регулировка позиций меток в 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. Оба изображения отображаются правильно.
Ответы
Ответ 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
.