Регулировка положения меток в UITableViewCell - PullRequest
21 голосов
/ 20 августа 2009

Я использую 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. Оба изображения отображаются правильно.

Ответы [ 4 ]

43 голосов
/ 02 ноября 2010

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

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

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

Или для отступов в ячейках просто:

cell.indentationLevel = cell.indentationLevel + 1;

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

35 голосов
/ 20 августа 2009

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

1 голос
/ 20 августа 2009

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

0 голосов
/ 20 августа 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...