Sto utilizzando systemLayoutSizeFittingSize
per ottenere la dimensione minima per una sottoclasse di visualizzazione personalizzata che soddisfi i suoi vincoli interni.Vincolo "UITemporaryLayoutHeight" iOS
let someView = SomeView()
someView.setNeedsUpdateConstraints()
someView.setNeedsLayout()
someView.layoutIfNeeded()
let viewSize = someView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
println(viewSize) // PRINTS (0.0, 96.0) WHICH IS RIGHT!
ottengo il valore corretto, ma ho anche ricevuto un avviso Unable to simultaneously satisfy constraints
:
"<NSLayoutConstraint:0x7ff16b753190 '_UITemporaryLayoutHeight' V:[ProjectName.SomeView:0x7ff16b772210(0)]>",
"<NSLayoutConstraint:0x7ff16b75de50 UIImageView:0x7ff16b76eff0.top == ProjectName.SomeView:0x7ff16b772210.topMargin>",
"<NSLayoutConstraint:0x7ff16b7653f0 UIImageView:0x7ff16b76eff0.bottom <= ProjectName.SomeView:0x7ff16b772210.bottomMargin>"
Qui di seguito è il mio SomeView
UIView sottoclasse.
Contiene solo un'immagine 80x80 fissata ai margini superiore, sinistro e inferiore. (Sto usando PureLayout per scrivere vincoli).
Ora ovviamente questa vista avrà un'altezza fissa di 96 (80 + 8x2 per i margini) ma teoricamente potrebbe allungarsi se le sue sottoview cambiano dimensione.
Qualche idea? Ricerca Google per UITemporaryLayoutHeight
(o larghezza) dà 0 risultati ...
class SomeView: UIView {
let imageView = UIImageView()
var constraintsSet = false
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.lightGrayColor()
imageView.backgroundColor = UIColor.darkGrayColor()
addSubview(imageView)
}
override func updateConstraints() {
if(!constraintsSet) {
imageView.autoPinEdgeToSuperviewMargin(.Top)
imageView.autoPinEdgeToSuperviewMargin(.Left)
imageView.autoPinEdgeToSuperviewMargin(.Bottom, relation: NSLayoutRelation.GreaterThanOrEqual)
imageView.autoSetDimension(.Width, toSize: 80.0)
imageView.autoSetDimension(.Height, toSize: 80.0)
constraintsSet = true
}
super.updateConstraints()
}
}
Come nota a margine: mi piacerebbe molto sentire le spiegazioni di Apple su questi _UITemporaryLayoutHeight e cose simili che appaiono nella console. –
Grazie, sembra risolvere il problema! – LorTush
Qualcuno si prega di chiedere ai laboratori WWDC e riferire. La mia ipotesi: hanno messo il limite lì per rendere il sistema operativo esplicitamente richiamare la tua vista per non essere felice di essere ridotto a 0 dimensioni. –