如何以编程方式添加与Autolayout的InputAccessoryView?

use*_*191 6 ios inputaccessoryview swift ios-autolayout

我正在尝试添加一个UIView带有"完成"按钮作为文本字段的输入附件视图.

        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
Run Code Online (Sandbox Code Playgroud)

但是,我无法在Xcode中看到视图高度设置和视图层次结构调试器/检查器中的按钮.

但是,如果我通过设置其框架添加视图,我可以看到添加的视图.我也尝试将高度约束强制设置为常数21,它打破了一些我没有添加的其他约束_UIKBAutolayoutHeightConstraint

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

以前有人遇到过这个问题吗?

Tom*_*żak -2

斯威夫特 3+

  1. 您需要在第一行指定工具栏视图的大小。
  2. 不要在 viewcontroller 类中使用“view”作为变量,因为它会与 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 
    }
    
    Run Code Online (Sandbox Code Playgroud)