Простое решение - вы можете изменить фрейм textLabel.
CGRect textLabelFrame = cell.textLabel.frame;
textLabelFrame.origin.x += xOffset;
textLabelFrame.size.width -= xOffset;
cell.textLabel.frame = textLabelFrame;
Я также сделал это, создав пользовательский UILabel, который поддерживает edgeInsets, аналогично UIButton.Это лучшее решение, потому что вы можете расположить этикетку для правильного размера, но вышеописанное будет работать, если у вас есть простые потребности.
[РЕДАКТИРОВАТЬ 1/2: исправлена опечатка с CGRect]
[РЕДАКТИРОВАТЬ 3: исправленный тип опечатки измененный кадр]
[РЕДАКТИРОВАТЬ 4: нужен простой подкласс]
Mea culpa.Я был неправ, что вы можете сделать это в tableView:cellForRowAtIndexPath
.Макет UITableViewCell происходит после того, как у делегата / источника данных tableView есть возможность настроить ячейку.Я протестировал реализацию ниже, она работает.
Сделайте, как я сказал выше, но создайте (простой) подкласс UITableViewCell
, который добавляет xOffset
в layoutSubviews
.Если вы сделаете это, вы также можете добавить свойство xOffset
, которое вы можете установить в tableView:cellForRowAtIndexPath:
.
@implementation XOffsetCell
// assumes property xOffset is defined and synthesized
- (void) layoutSubviews
{
[super layoutSubviews];
CGRect textLabelFrame = cell.textLabel.frame;
textLabelFrame.origin.x += self.xOffset;
textLabelFrame.size.width -= self.xOffset;
cell.textLabel.frame = textLabelFrame;
}
@end
Решение, которое предложило добавить пользовательский UILabel
к cell.contentView
, также является хорошимрешение.Я видел ваш комментарий, что он скрывает встроенный textLabel
, но в этом весь смысл.Вы больше не будете использовать встроенную метку, вместо нее используйте собственную метку.