UILabel не делает две строки - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть куча UILabel, но следующий UILabel (lastMessage) показывает только одну строку. Предполагается, что он усекается хвостом, но нет эллипсов, что означает, что вторая строка просто не существует. Кроме того, dateTime UILabel также не отображается. Может ли это быть как-то связано с моими ограничениями автопоставки? Мой код для UITableViewCell:

let nameLabel = UILabel()
    let lastMessage = UILabel()
    let profileImageView = UIImageView(image: #imageLiteral(resourceName: "blankAvatar"))
    let dateTime = UILabel()

    required init?(coder aDecoder: NSCoder) {super.init(coder: aDecoder)}
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        nameLabel.numberOfLines = 1
        nameLabel.tintColor = .label
        nameLabel.font = .boldSystemFont(ofSize: 18)
        nameLabel.translatesAutoresizingMaskIntoConstraints = false
        dateTime.numberOfLines = 1
        dateTime.tintColor = .label
        dateTime.text = "7:03"
        dateTime.translatesAutoresizingMaskIntoConstraints = false
        lastMessage.numberOfLines = 2
        lastMessage.tintColor = .lightGray
        lastMessage.lineBreakMode = .byTruncatingTail
        lastMessage.translatesAutoresizingMaskIntoConstraints = false

        profileImageView.contentMode = .scaleAspectFill
        profileImageView.layer.cornerRadius = profileImageView.frame.size.width
        profileImageView.clipsToBounds = true
        profileImageView.translatesAutoresizingMaskIntoConstraints = false

        contentView.addSubview(profileImageView)
        contentView.addSubview(nameLabel)
        contentView.addSubview(lastMessage)
        contentView.addSubview(dateTime)
        contentView.layoutMargins = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 3)
        let lg = contentView.layoutMarginsGuide
        NSLayoutConstraint.activate([
            profileImageView.leadingAnchor.constraint(equalTo: lg.leadingAnchor),
            profileImageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
            profileImageView.heightAnchor.constraint(equalToConstant: 50),
            profileImageView.widthAnchor.constraint(equalToConstant: 50),

            nameLabel.topAnchor.constraint(equalTo: lg.topAnchor),
            nameLabel.leadingAnchor.constraint(equalTo: profileImageView.trailingAnchor, constant: 6),
            nameLabel.trailingAnchor.constraint(equalTo: dateTime.leadingAnchor),
            nameLabel.bottomAnchor.constraint(equalTo: lastMessage.topAnchor, constant: 6),
            dateTime.topAnchor.constraint(equalTo: lg.topAnchor),
            dateTime.trailingAnchor.constraint(equalTo: lg.trailingAnchor),
            dateTime.bottomAnchor.constraint(equalTo: lastMessage.topAnchor),

            lastMessage.leadingAnchor.constraint(equalTo: profileImageView.trailingAnchor, constant: 6),
            lastMessage.trailingAnchor.constraint(equalTo: lg.trailingAnchor),
            lastMessage.bottomAnchor.constraint(equalTo: lg.bottomAnchor)
        ])
    }

Это было в init. Спасибо!

Редактировать: UITableViewCell не был проблемой. Я встроил таблицу в горизонтальный UIScrollView ( repo ), но мои автоматические ограничения макета для таблицы были верхний, ведущий, конечный и нижний якорь. Я переключил его на конечный якорь, чтобы вместо него можно было использовать якорь ширины с константой view.bounds.width.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Добавьте это к вашему коду:

yourLabel.numberOfLines = 0

И не давайте height constraint вашему label. Таким образом, он может автоматически изменять размеры в соответствии с text height.

Надеюсь, это поможет ...

0 голосов
/ 21 апреля 2020

Обновите ваш код следующим образом:

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