UITableViewCell - как сделать правое усечение UILabel вместо левого? - PullRequest
4 голосов
/ 09 ноября 2009

Я создал UITableViewCell, используя UITableViewCellStyleValue1, который Apple определяет как:

Стиль для ячейки с меткой слева от ячейки с выровненным по левому краю и черным текстом; справа находится метка, которая имеет синий текст поменьше и выровнена по правому краю. Приложение «Настройки» использует ячейки в этом стиле.

Я пытаюсь настроить текст ячейки так, чтобы слева отображался какой-то короткий текст, а справа - длинный, например,

URL http://www.mylongurl.com/subdirectory/etc

Моя проблема в том, что левая UILabel усекается вместо правой, поэтому она отображается как:

U ... http://www.mylongurl.com/subdirectory/etc

Если я сделаю URL еще длиннее, чем ОБА, ярлыки будут обрезаны, например,

U ... http://www.mylongurl.com. .. подкаталога / etc

Есть ли способ сделать правое усечение UILabel вместо левого без использования пользовательского UITableViewCell? Я знаю, как создать пользовательский UITableViewCell, но это кажется излишним?

Я могу настроить UILineBreakMode, чтобы изменить место, где текст усекается внутри UILabel, но я не вижу способа заставить detailTextLabel настроить его ширину, чтобы позволить textLabel отображать саму себя.

[[lCell textLabel] setText:@"URL"];
[[lCell detailTextLabel] setText:@"http://www.mylongurl.com/subdirectory/etc"];
[[lCell detailTextLabel] setLineBreakMode:UILineBreakModeMiddleTruncation];

Ответы [ 2 ]

3 голосов
/ 09 ноября 2009

У вас есть несколько вариантов.

Вероятно, наиболее близким по духу к тому, о чем вы, похоже, просите, является возиться с рамками надписей в ваших UITableViewDelegate х tableView:willDisplayCell:forRowAtIndexPath:. (Внесение изменений в макет ячейки в tableView:cellForRowAtIndexPath: вашего UITableViewDataSource не будет выполняться, поскольку UITableViewCells выполняет всю свою внутреннюю работу по компоновке после tableView:cellForRowAtIndexPath:.) Вы можете использовать NSString - sizeWithFont: для помогите выяснить требования к макету вашего textLabel.

Вы также можете использовать различные подходы, как вы упомянули, такие как создание подклассов UITableViewCell или установка cell.textLabel.adjustsFontSizeToFitWidth = YES.

3 голосов
/ 09 ноября 2009

Лучшим решением было бы создать подкласс ячейки UITableView и настроить ваши настройки на метки, как здесь, в init. Возможно, вы захотите переопределить layoutSubviews и изменить размер меток, если хотите, чтобы левый был шире.

- (void)layoutSubviews {
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(0.0, 0.0, 100.0, self.frame.size.height);
    self.detailTextLabel.frame = CGRectMake(0.0, 0.0, 220.0, self.frame.size.height);
}

Очевидно, что это произвольные значения. Вы захотите поиграть с разными размерами, чтобы удовлетворить ваши потребности.

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