Je suis en train de faire une liste personnalisée de la cellule (collection de la liste d'affichage de la cellule), sur la base de cet article. J'ai ajouter manuellement la hauteur de la vue dans la cellule, mais je vois les avertissements ci-dessous dans la console de Xcode, et pas sûr de la partie à corriger.
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x281209220 h=--& v=--& liveTest.LiveChannelContentView:0x128c13430.height == 44 (active)>",
"<NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60 (active)>",
"<NSLayoutConstraint:0x2812372a0 V:|-(0)-[UIView:0x128c136b0] (active, names: '|':liveTest.LiveChannelContentView:0x128c13430 )>",
"<NSLayoutConstraint:0x2812372f0 UIView:0x128c136b0.bottom == liveTest.LiveChannelContentView:0x128c13430.bottom (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60 (active)>
Le code ci-dessous est là où je reçois ce message d'erreur.
class LiveChannelContentView: UIView, UIContentView {
let contentsView = UIView()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.text = ""
return label
}()
lazy var statusLabel: UILabel = {
let label = UILabel()
label.text = ""
return label
}()
lazy var symbolImageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
return imageView
}()
var liveEvent: LiveEvent?
init(configuration: LiveChannelContentConfiguration) {
// Custom initializer implementation here.
super.init(frame: .zero)
print("this is the view height: \(self.bounds.height)") // -> I get 0.0 in here
setupAllViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupAllViews() {
addSubview(contentsView)
contentsView.addSubview(symbolImageView)
contentsView.addSubview(indicator)
contentsView.addSubview(titleLabel)
contentsView.addSubview(statusLabel)
contentsView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
contentsView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
contentsView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),
contentsView.heightAnchor.constraint(equalToConstant: 60)
])
contentsView.backgroundColor = .yellow
symbolImageView.centerY(leading: contentsView.leadingAnchor, trailing: nil, parent: contentsView, paddingLeft: 0, paddingRight: 0, size: CGSize(width: 50, height: 50))
indicator.centerY(leading: contentsView.leadingAnchor, trailing: nil, parent: contentsView, paddingLeft: 0, paddingRight: 0, size: CGSize(width: 50, height: 50))
titleLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
titleLabel.leadingAnchor.constraint(equalTo: symbolImageView.trailingAnchor, constant: 8),
titleLabel.topAnchor.constraint(equalTo: symbolImageView.topAnchor),
titleLabel.trailingAnchor.constraint(equalTo: contentsView.trailingAnchor)
])
statusLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
statusLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor),
statusLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor),
statusLabel.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor)
])
print("this is the view after setup: \(self.bounds.height)") // I also get 0.0 in here
}
}
Donc, pour clarifier où la LiveChannelContentView est, je viens de rajouter le jaune d'arrière-plan de la vue. Il ya deux choses que je ne comprends pas. Tout d'abord, même Xcode me dit que
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60 (active)>
quand je prends une capture d'écran de l'application et de mesurer l'arrière-plan jaune UIView de la hauteur, il est toujours 60. J'ai pensé à la rupture contrainte signifie que l'utilisation d'autres contraintes de hauteur au lieu de 60, mais est-ce mal?
Une autre chose est que j'étais curieux de savoir où l'
"<NSAutoresizingMaskLayoutConstraint:0x281209220 h=--& v=--& liveTest.LiveChannelContentView:0x128c13430.height == 44 (active)>" est utilisé dans mon code. J'ai cherché le fichier contient
44
dans mon espace de travail mais je n'ai rien eu.
Pas vraiment sûr, mais je pensais que la hauteur de 44 et 60 est appliqué à la même UIView et Xcode se débarrasser de la 60 de hauteur de l'ancrage ou de quelque chose. Cependant, quand je supprime la hauteur d'ancrage de la contentsView, contentsView.heightAnchor.constraint(equalToConstant: 60)
l'application s'est écrasé comme ci-dessous.
J'ai aussi essayé de supprimer le haut ou le bas d'ancrage de la contentsView, mais il est aussi écrasé l'application.
contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
ou
contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),
Si quelqu'un peut me dire quelle contrainte devrais-je résoudre à se débarrasser de la waring s'il vous plaît?