Регулировка положения меток в 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. Оба изображения отображаются правильно.
4 ответа
Вы будете хотеть обычай UITableViewCell
подкласс, который переопределяет layoutSubviews, чтобы выполнить грязную работу по размещению любых подпредставлений там. Вызываю супер потом поправляю detailTextLabel.frame
это, наверное, самая легкая вещь, которую можно сделать.
Вы можете попробовать отрегулировать метку с помощью уровня отступа и отступа:
cell.indentationWidth = MY_DESIRED_WIDTH;
cell.indentationLevel = 1;
(для незапятнанных клеток)
Или для клеток с отступом просто сделайте:
cell.indentationLevel = cell.indentationLevel + 1;
Оба они должны сдвигать / отступать ваши метки.
Или вы можете изменить ячейку с UITableViewCellStyleSubtitle на значение по умолчанию и добавить свои собственные объекты в cell.contentView и разместить их там, где вы хотите. Вам не обязательно создавать подкласс UITableViewCell (например, пользовательскую ячейку) или использовать layoutSubViews. Все это можно сделать в tableView:cellForRowAtIndexPath.
Вы могли бы сделать это с CGAffineTransform
, (Непроверенный) код для detailTextLabel
правые 10 пикселей будут выглядеть примерно так:
CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0);
[detailTextLabel setTransform:translate];
Хотя вы можете сделать это, я думаю, вы будете счастливее, создавая свой собственный UITableViewCell
,