2016-07-21 5 views
1

Мне нужно добавить всплывающее окно с UILabel и UISlider, но у меня возникли проблемы с настройкой ширины UISlider.UISlider layout игнорируя ширину

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? 
} 

В этом примере UISlider всегда будет получить ту же ширину, что и UILabel.

Если я использую только горизонтальный макет, например H:|-[label]-[slider]-|UISlider получает width == 0.

Как я могу сделать UISlider использовать полную ширину родительского представления (минус 8 точек пространства на каждой стороне)?

ответ

1
frontPanel!.translatesAutoresizingMaskIntoConstraints = true 

frontPanel является subview из ViewController.view и установить точную frame. В моем понимании следующее.

Смежные вопросы