Как я могу обрезать текст в ячейке UITableView TextLabel, чтобы он не скрывал DetailTextLabel?
У меня есть список телефонных тарифов, textLabel
это страна / территория и detailTextLabel
это скорость, которую я должен отобразить.
Для некоторых строк textLabel
слишком длинный и detailTextLabel
становится скрытым Есть ли настройка для автоматической настройки текста с …
если это слишком долго?
Вот пример, где Central African Republic (Mobile)
имеет эту проблему:
2 ответа
При размещении ячейки в стиле UITableViewCellStyle.Value1 метка заголовка, кажется, получает приоритет и выталкивает метку детали из поля зрения. Решением может быть создание подкласса UITableViewCell и переопределение его layoutSubviews():
override func layoutSubviews() {
super.layoutSubviews()
if let detail = self.detailTextLabel {
// this will do the actual layout of the detail
// label's text, so you can get its width
detail.sizeToFit()
// you might want to find a clever way to calculate this
// instead of assigning a literal
let rightMargin: CGFloat = 16
// adjust the detail's frame
let detailWidth = rightMargin + detail.frame.size.width
detail.frame.origin.x = self.frame.size.width - detailWidth
detail.frame.size.width = detailWidth
detail.textAlignment = .Left
// now truncate the title label
if let text = self.textLabel {
if text.frame.origin.x + text.frame.size.width > self.frame.width - detailWidth {
text.frame.size.width = self.frame.width - detailWidth - text.frame.origin.x
}
}
}
}
Обратите внимание, что хотя detail.textAlignment = .Left
мы учитываем ширину детали, и фактический текст выровнен по правому краю.
Так что вам, вероятно, нужно сделать это вручную исправить ширину textLabel, так как по умолчанию она занимает всю ширину ячейки. Для этого вы можете сделать следующее:
CGRect textLabelFrame = cell.textLabel.frame;
textLabelFrame.size.width -= DETAIL_LABEL_WIDTH;
cell.textLabel.frame = textLabelFrame;
В вашем cellForRowAtIndexPath, где DETAIL_LABEL_WIDTH - это ширина, которую вы хотите для detailTextLabel. Предполагая, что метка имеет автоэллиптическое значение, что и должно быть, это приведет к тому, что текст добавит "..." в конце метки прямо перед меткой подробного текста, если ширина больше ширины, которую вы устанавливаете выше.,