testato per Xcode 7:
suppongo siete alla ricerca di qualcosa di simile
Soluzione:
Passaggi:1) ciò che è necessario è una vista incapsulante che trattiene tutti e tre i pulsanti (skype, telefono, email) al centro indipendentemente dal fatto che ci sia un pulsante, due o tre al suo interno. Per questo viene creata una vista titolare che viene mostrata con sfondo verde sotto l'istantanea.
vincoli per tale vista titolare sono
è solo per contenere tutte le subviews, otterrà la sua dimensione dal suo contenuto quindi non necessità di dare altezza/larghezza vincoli.
2) ora vincoli per il pulsante al centro saranno
3) vincoli per pulsanti su entrambi i lati sarà
Se è necessario nascondere qualsiasi pulsante, basta rendere costante il suo vincolo di larghezza a 0 e tutto gli altri pulsanti vengono ridisposti conseguenza
Per TableView cellulare:
@IBOutlet weak var emailButtonWidthConstraint : NSLayoutConstraint?
@IBOutlet weak var phoneButtonWidthConstraint : NSLayoutConstraint?
@IBOutlet weak var skypeButtonWidthConstraint : NSLayoutConstraint?
func showButtons(showSkype showSkype : Bool, showEmail : Bool, showPhone : Bool){
emailButtonWidthConstraint?.constant = showEmail ? 54.0 : 0.0
phoneButtonWidthConstraint?.constant = showPhone ? 54.0 : 0.0
skypeButtonWidthConstraint?.constant = showSkype ? 54.0 : 0.0
self.layoutIfNeeded()
}
Uso:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as? CustomCell
if indexPath.row == 0 {
cell?.showButtons(showSkype: true, showEmail: true, showPhone: true)
} else if indexPath.row == 1 {
cell?.showButtons(showSkype: false, showEmail: true, showPhone: true)
} else if indexPath.row == 2 {
cell?.showButtons(showSkype: true, showEmail: false, showPhone: true)
} else if indexPath.row == 3 {
cell?.showButtons(showSkype: true, showEmail: true, showPhone: false)
} else if indexPath.row == 4 {
cell?.showButtons(showSkype: false, showEmail: false, showPhone: true)
} else if indexPath.row == 5 {
cell?.showButtons(showSkype: false, showEmail: true, showPhone: false)
} else if indexPath.row == 6 {
cell?.showButtons(showSkype: true, showEmail: false, showPhone: false)
} else {
cell?.showButtons(showSkype: true, showEmail: true, showPhone: true)
}
return cell!
}
stesso può essere raggiunto con UIStackView (senza tutto questo mal di testa, ovviamente) ma che non verrà eseguito su iOS prima del 9.0
Aggiornato (26 ottobre 2015):
GitHub Repo per il progetto di test
da allineare verticalmente ed orizzontalmente sia, o solo in verticale e mettere uno accanto saggio? – Usama
stai usando xib? –
Vorrei creare una sottoclasse della cella e impostare i frame dei pulsanti in layoutSubviews: – Alex