web-dev-qa-db-fra.com

Accéder à la largeur UIView lors de l'exécution

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()

    }
}
27
gemello

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.

68
Steve Rosenberg

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!

10
Craig

vous ne pouvez l'utiliser que

self.view1.frame.size.width
self.view1.frame.size.height
6
Shahryar