Как я могу обрезать текст в ячейке 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. Предполагая, что метка имеет автоэллиптическое значение, что и должно быть, это приведет к тому, что текст добавит "..." в конце метки прямо перед меткой подробного текста, если ширина больше ширины, которую вы устанавливаете выше.,

Другие вопросы по тегам