web-dev-qa-db-fra.com

Comment puis-je définir le cornerRadius d'un UIStackView?

Je mets à jour mon application pour utiliser UIStackViews, maintenant que la plupart des gens devraient avoir mis à jour vers iOS 9.

Dans l'ancienne version, j'ai créé une UIView composée de deux UITextFields et défini sa propriété layer.cornerRadius.

Dans la nouvelle version, j'ai créé un UIStackView composé des deux mêmes UITextFields, au lieu de l'UIView. Lorsque j'essaie de définir sa propriété layer.cornerRadius, rien ne semble se produire. La documentation ne semble pas contenir d'informations utiles/pertinentes.

21
WallyAmerica

UIStackView gère simplement la position et la taille de ses vues arrangées, le cornerRadius n'a aucun effet. Essayez d'ajouter une vue personnalisée sous la stackView et définissez le cornerRadius de celle-ci.

53
ZHZ

ajoutez cornerRadius sur la vue d'ensemble de stackview et activez la propriété clipsToBounds de la vue d'ensemble afin que les sous-vues soient limitées aux limites de la vue d'ensemble.

4
tahmina

Vous pouvez utiliser une extension comme celle-ci:

extension UIStackView {
    func customize(backgroundColor: UIColor = .clear, radiusSize: CGFloat = 0) {
        let subView = UIView(frame: bounds)
        subView.backgroundColor = backgroundColor
        subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        insertSubview(subView, at: 0)

        subView.layer.cornerRadius = radiusSize
        subView.layer.masksToBounds = true
        subView.clipsToBounds = true
    }
}
1
Murat Yasar

Si vous souhaitez fournir backgroundColor, CornerRadius et Shadow à StackView:

extension UIStackView {
func insertCustomizedViewIntoStack(background: UIColor, cornerRadius: CGFloat, shadowColor: CGColor, shadowOpacity: Float, shadowRadius: CGFloat) {
        let subView = UIView(frame: bounds)
        subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        subView.layer.cornerRadius = cornerRadius
        subView.backgroundColor = backgroundColor
        subView.layer.shadowColor = shadowColor
        subView.layer.shadowOpacity = shadowOpacity
        subView.layer.shadowOffset = .zero
        subView.layer.shadowRadius = shadowRadius
        insertSubview(subView, at: 0)
    }
}

Si vous souhaitez fournir backgroundColor, CornerRadius, borderColor et border width à StackView:

extension UIStackView {
     func insertViewIntoStack(background: UIColor, cornerRadius: CGFloat, borderColor: CGColor, borderWidth: CGFloat) {
        let subView = UIView(frame: bounds)
        subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        subView.layer.cornerRadius = cornerRadius
        subView.backgroundColor = backgroundColor
        subView.layer.borderColor = borderColor
        subView.layer.borderWidth = borderWidth
        insertSubview(subView, at: 0)
    }
    }
0
Shankar