Dans Swift, comment obtenir la largeur (ou la hauteur) au moment de l'exécution d'une UIView créée par programme à l'aide de contraintes de disposition automatique?
J'ai essayé view1.frame.size.width
et view1.frame.width
, mais les deux renvoient 0
.
J'ai suivi un tutoriel de mise en page automatique par MakeAppPie et ajouté view1.layer.cornerRadius = view1.bounds.width/2
comme ci-dessous, mais cela n'a eu aucun effet, j'ai donc fait un po sur view1.bounds.width
et obtenu 0
:
class ViewController: UIViewController {
func makeLayout() {
//Make a view
let view1 = UIView()
view1.setTranslatesAutoresizingMaskIntoConstraints(false)
view1.backgroundColor = UIColor.redColor()
//Make a second view
let view2 = UIView()
view2.setTranslatesAutoresizingMaskIntoConstraints(false)
view2.backgroundColor = UIColor(red: 0.75, green: 0.75, blue: 0.1, alpha: 1.0)
//Add the views
view.addSubview(view1)
view.addSubview(view2)
//--------------- constraints
//make dictionary for views
let viewsDictionary = ["view1":view1,"view2":view2]
//sizing constraints
//view1
let view1_constraint_H:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[view1(>=50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view1_constraint_V:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[view1(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
view1.addConstraints(view1_constraint_H)
view1.addConstraints(view1_constraint_V)
//view2
let view2_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:[view2(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view2_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:[view2(>=40)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
view2.addConstraints(view2_constraint_H)
view2.addConstraints(view2_constraint_V)
//position constraints
//views
let view_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-100-[view2]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-136-[view1]-100-[view2]-100-|", options: NSLayoutFormatOptions.AlignAllTrailing, metrics: nil, views: viewsDictionary)
view.addConstraints(view_constraint_H)
view.addConstraints(view_constraint_V)
view1.layer.cornerRadius = view1.bounds.width/2
}
override func viewDidLoad() {
super.viewDidLoad()
func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
// Do any additional setup after loading the view, typically from a nib.
view.backgroundColor = UIColor(red: 0.9, green: 0.9, blue: 1, alpha: 1.0)
makeLayout()
}
}
Ajoutez ceci et vous êtes prêt à partir:
override func viewDidLayoutSubviews() {
println(self.view1.frame.size)
}
vous pouvez regarder la largeur ou la hauteur à votre guise.
Une seule chose à propos de ces domaines:
self.view1.frame.size.width
self.view1.frame.size.height
Ne sont la taille réelle de l'appareil utilisateur que si la vue a été dessinée à l'écran, sinon ils sont ce que vous les définissez comme dans le storyboard. Donc, si vous essayez d'effectuer une sorte de calcul avant de dessiner la vue, vous devrez déterminer la largeur ou la hauteur d'une autre manière!
vous ne pouvez l'utiliser que
self.view1.frame.size.width
self.view1.frame.size.height