Sto lavorando su un'applicazione semplice e ora mi concentro sull'espansione di UITableViewCell dopo che l'utente ha toccato quella cella. E 'iOS 8 app così ho impostato:iOS espande UITableViewCell al clic con AutoLayout
self.tableVIew.rowHeight = UITableViewAutomaticDimension
self.tableVIew.estimatedRowHeight = 50
vincoli cellulari simile a questa:
Se la cella di rubinetto utente questa funzione viene chiamata:
func extend() {
self.contentView.removeConstraint(self.bottomConstraint)
let additionalView = UIView()
additionalView.setTranslatesAutoresizingMaskIntoConstraints(false)
additionalView.backgroundColor = UIColor.orangeColor()
self.contentView.addSubview(additionalView)
self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[additionalView(50)]-5-|", options: nil, metrics: nil, views: ["additionalView" : additionalView]))
self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-5-[additionalView(100)][email protected]|", options: nil, metrics: nil, views: ["additionalView" : additionalView]))
}
self.bottomConstraint è costraint tra il fondo del cerchio verde e il contenuto della cellaVista il fondo.
La domanda è: Perché questa soluzione funziona solo se c'è impostato priorità vincolo:
V:|-5-[additionalView(100)][email protected]|
?
Senza priorità esplicita ho ottenuto errori:
(
"<NSLayoutConstraint:0x7a63f7a0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7a737840(60)]>",
"<NSLayoutConstraint:0x7a644f40 V:|-(5)-[UIView:0x7a63f2a0] (Names: '|':UITableViewCellContentView:0x7a737840)>",
"<NSLayoutConstraint:0x7a644fb0 V:[UIView:0x7a63f2a0(100)]>",
"<NSLayoutConstraint:0x7a644f70 V:[UIView:0x7a63f2a0]-(5)-| (Names: '|':UITableViewCellContentView:0x7a737840)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7a644f70 V:[UIView:0x7a63f2a0]-(5)-| (Names: '|':UITableViewCellContentView:0x7a737840)>
La mia ipotesi è che l'altezza corrente della cella sia 60 e la nuova altezza sia 110, quindi è necessario interrompere uno dei vincoli per farlo crescere, la priorità predefinita è 1000, 3 i vincoli con priorità uguale devono essere interrotti. – gabbler
L'altezza della cella non deve essere calcolata dinamicamente in base ai vincoli della vista del contenuto? – MichalMoskala
Sì, ma additionalView ha un'altezza 100, non è vero? – gabbler