Пользовательский UITableViewCell - не могу добавить подпредставление - PullRequest
0 голосов
/ 26 апреля 2020

Я создал собственный класс UITableViewCell, как показано ниже (программно - для этого раскадровки не используются):

import UIKit

class MainGroupCell: UITableViewCell {
    var groupLabel : UILabel {
        let label = UILabel()
        label.textColor = .black
        label.text = "Test Group"
        label.font = UIFont(name: "candara", size: 20)
        return label
    }

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        self.contentView.addSubview(groupLabel)
        groupLabel.snp.makeConstraints({make in
            make.center.equalTo(self.contentView)
        })
    }

    required init?(coder aDecoder: NSCoder){
        fatalError("init(coder:) has not been implemented")
    }
}

И по какой-то причине я получаю сообщение об ошибке contentView и groupLabel не находятся в одной иерархии представлений, но они есть - я добавил groupLabel в качестве подпредставления к contentView, как вы можете видеть. Есть ли какая-либо причина для появления этой ошибки? Я сделал это с помощью обычного API Atuolayout вместо SnapKit, и не повезло. Чувствую, что это может быть маленькой ошибкой, которую я пропускаю. Я также попытался использовать ограничение equalToSuperview, а не то, что я показал выше, но, как и ожидалось, оно также выдает ту же ошибку - суперпредставление groupLabel возвращает nil.

Ошибка:

Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x280870b80 
"UILabel:0x105e79fa0'Test Group'.centerX"> and <NSLayoutXAxisAnchor:0x280870a00 
"UITableViewCellContentView:0x105fa16a0.centerX"> because they have no common ancestor. 
 Does the constraint or its anchors reference items in different view hierarchies?  That's illegal.'

Ответы [ 2 ]

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

Попробуйте,

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    addSubview(groupLabel)
    groupLabel.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        groupLabel.leadingAnchor.constraint(equalTo: leadingAnchor,constant: 16),
        groupLabel.topAnchor.constraint(equalTo: topAnchor, constant: 16),
        groupLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16),
        groupLabel.bottomAnchor.constraint(equalTo: bottomAnchor,constant: -16),
    ])

}

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

let groupLabel : UILabel = {
        let label = UILabel()
        label.textColor = .black
        label.text = "Test Group"
        label.font = UIFont(name: "candara", size: 20)
        return label
}()
0 голосов
/ 26 апреля 2020

Изменить на

make.center.equalTo(self.contentView.snp.center)

или

make.center.equalToSuperview()

Вместо

make.center.equalTo(self.contentView)
...