2016-04-10 21 views
6

Sto cercando di aggiungere un UIView con il pulsante "Fine" come una vista accessi di input al campo di testo.Come aggiungere a livello di codice un InputAccessoryView con Autolayout?

 let view = UIView() 
     let doneButton = UIButton(type: .Custom) 
     doneButton.setTitle("Done", forState: .Normal) 
     doneButton.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(doneButton) 
     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[button]-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["button":doneButton])) 
     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[button]|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["button":doneButton])) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: doneButton, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)) // Even this does not work 
     self.emailTextField.inputAccessoryView = view 

Ma comunque non riesco a vedere l'altezza viste stato impostato né i pulsanti Nella Gerarchia debugger/ispettore in Xcode.

Ma se aggiungo una vista impostando la sua cornice, posso vedere la vista che si sta aggiungendo. Inoltre ho provato a installare vincolo altezza forzatamente a una costante 21 e si è rotto alcuni altri vincoli che non avevo aggiunto _UIKBAutolayoutHeightConstraint

"<NSLayoutConstraint:0x7fa3c962be50 UIView:0x7fa3c963bf60.height == UIButton:0x7fa3c963c0d0.height + 21>", 
    "<NSLayoutConstraint:0x7fa3c95e0a90 '_UIKBAutolayoutHeightConstraint' V:[UIView:0x7fa3c963bf60(0)]>" 

Uno affrontato questo problema prima?

+0

Perché vuoi fare tasto e Impostazione vista nel codice? Potresti farlo nel builder dell'interfaccia. – Ramis

+0

@Ramis Sto semplicemente facendo tutto in codice invece di creare viste. Quindi anche questo viene aggiunto a livello di programmazione. – user5381191

risposta

0

Swift 3+

  1. È necessario specificare dimensioni di vista della barra degli strumenti in prima linea.
  2. Non utilizzare 'vista' come variabile nella classe viewcontroller poiché crea confusione vs self.view

    override func viewDidLoad() { 
        super.viewDidLoad() 
        let toolBar = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 50)) 
        toolBar.backgroundColor = .gray 
        let doneButton = UIButton(type: .custom) 
        doneButton.setTitle("Done", for: .normal) 
        doneButton.translatesAutoresizingMaskIntoConstraints = false 
        toolBar.addSubview(doneButton) 
        toolBar.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[button]-|", 
                      options: .directionLeadingToTrailing, 
                      metrics: nil, 
                      views: ["button":doneButton])) 
        toolBar.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[button]|", 
                      options: .directionLeadingToTrailing, 
                      metrics: nil, 
                      views: ["button":doneButton])) 
        self.emailTextField.inputAccessoryView = toolBar 
    }