UITableView ячейка detailTextLabel выравнивание текста не работает - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь отформатировать положение чисел в свойстве detailTextLabel UIViewController. Числа в части detailTextLabel UIViewTable слишком далеко вправо (как на рисунке).

Screenshot of the alignment problem

Я пробовал:

cell.detailTextLabel?.textAlignment = .center

но это не работает. Я пробовал .left, .right, .justified и различные настройки в конструкторе интерфейсов.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PracticeWord", for: indexPath)

        let sortedPracticeWord = sortedPracticeWords[indexPath.row]
        print("practiceWord is: \(sortedPracticeWord)")

        let split = sortedPracticeWord.components(separatedBy: "::")

        cell.textLabel?.text = split[0]

        cell.textLabel?.textColor = UIColor.white

        cell.selectedBackgroundView = UIView()
        cell.selectedBackgroundView!.backgroundColor = UIColor(white: 1, alpha: 0.20)

        cell.textLabel?.text = split[1]
        cell.detailTextLabel?.text = split[2]
        cell.detailTextLabel?.textAlignment = .center

        print("cell is: \(cell)")
        return cell
    }

Я бы хотел, чтобы каждое число заканчивалось буквально под «g» слова «неправильно».

Ответы [ 3 ]

0 голосов
/ 03 апреля 2019

Подробная текстовая метка отображается только со встроенными стилями UITableViewCell, и она не будет учитывать выравнивание, потому что стили по умолчанию будут работать сами по себе и не дадут вам такого большого контроля.Это просто хорошо для простых вещей, но быстро становится ограничением для всего нетривиального.

Если вы хотите контролировать размещение, вам нужно определить свою собственную ячейку таблицы с левой и правой UILabels и ограничить их именно там, гдеты хочешь их.Также имейте в виду, что если пользователь изменяет размер системного шрифта, вы все равно можете не совпадать с символом «g», поэтому вы можете рассмотреть другой дизайн или просто не беспокоиться об этом выравнивании.

См. https://developer.apple.com/documentation/uikit/uitableviewcell/cellstyle для описания встроенных стилей, но я подозреваю, что вам нужно создать свой собственный, если стиль по умолчанию не выполняет то, что вы хотите.

0 голосов
/ 03 апреля 2019

После создания пользовательских ячеек, следуя этому руководству:

создание пользовательских ячеек таблицы в быстром

Кажется, это дает мне то, что я изначально планировал.

New alignment after creating custom cells

0 голосов
/ 03 апреля 2019

Я думаю, что здесь происходит то, что detailTextLabel измеряется в соответствии с длиной текста, а вся метка выравнивается по правому краю.

Я бы попытался добавить пробел к добавляемому вами тексту.к текстовой метке.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PracticeWord", for: indexPath)

    let sortedPracticeWord = sortedPracticeWords[indexPath.row]
    print("practiceWord is: \(sortedPracticeWord)")

    let split = sortedPracticeWord.components(separatedBy: "::")

    cell.textLabel?.text = split[0]

    cell.textLabel?.textColor = UIColor.white

    cell.selectedBackgroundView = UIView()
    cell.selectedBackgroundView!.backgroundColor = UIColor(white: 1, alpha: 0.20)

    cell.textLabel?.text = split[1]
    cell.detailTextLabel?.text = split[2] + "   "
    cell.detailTextLabel?.textAlignment = .center

    print("cell is: \(cell)")
    return cell
}
...