2016-07-21 8 views
1

Ich muss eine Popup-Ansicht mit einem UILabel und einem UISlider hinzufügen, aber ich habe Probleme bei der Einstellung der Breite des UISlider.UISlider Layout ignorieren Breite

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     frontPanel = UIView() 
     frontPanel!.backgroundColor = UIColor.whiteColor() 
     frontPanel!.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(frontPanel!) 

     valueSlider = UISlider() 
     valueSlider!.translatesAutoresizingMaskIntoConstraints = false 
     valueSlider!.frame = CGRect(x: 0, 
            y: 0, 
            width: frontPanel!.frame.width - 16, 
            height: 35) 

     sliderLabel = UILabel() 
     sliderLabel!.translatesAutoresizingMaskIntoConstraints = false 

     sliderLabel!.text = "Adjust value" 

     let frontPanelSubviews: [String : AnyObject] = [ 
      "label" : sliderLabel!, 
      "slider" : valueSlider! 
     ] 

     frontPanel!.addSubview(sliderLabel!) 
     frontPanel!.addSubview(valueSlider!) 

     frontPanel?.addConstraints(
      NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]-[slider]-|", 
      options: [], 
      metrics: nil, 
      views: frontPanelSubviews) 
     ) 
     frontPanel?.addConstraints(
      NSLayoutConstraint.constraintsWithVisualFormat("H:|-[label]-|", 
      options: [], 
      metrics: nil, 
      views: frontPanelSubviews) 
     ) 
     frontPanel?.addConstraints(
      NSLayoutConstraint.constraintsWithVisualFormat("H:|-[slider]-|", 
      options: [], 
      metrics: nil, 
      views: frontPanelSubviews) 
     ) 

    } 

    override func viewDidLayoutSubviews() { 
     frontPanel?.frame = CGRect(x: 0, 
            y: view.frame.height - 75, 
            width: view.frame.width, 
            height: 75) 
    } 

    @IBOutlet weak var backPanel: UIView! 
    @IBOutlet weak var valueLabel: UILabel! 

    var frontPanel: UIView? 
    var valueSlider: UISlider? 
    var sliderLabel: UILabel? 
} 

In diesem Beispiel wird die UISlider immer die gleiche Breite wie die UILabel bekommen.

Wenn ich nur ein horizontales Layout contraint wie H:|-[label]-[slider]-| die UISlider bekommt width == 0.

Wie kann ich die UISlider verwenden die volle Breite der übergeordneten Ansicht (minus der 8 Punkte Platz auf jeder Seite)?

Antwort

1
frontPanel!.translatesAutoresizingMaskIntoConstraints = true 

frontPanel ist ein subview von ViewController.view und Sie genau frame eingestellt. In meinem Verständnis ist wie folgt.