更改UIToolBar的NSConstraints时,应用程序崩溃

时间:2019-11-06 11:43:55

标签: ios swift

基本上,一旦选择了文本字段,我试图在键盘上方显示UIToolBar。

选择该文本字段进行编辑时出现以下错误:

  

由于未捕获的异常“ NSGenericException”而终止应用程序,   原因:“无法激活锚点约束    和      因为他们没有共同的祖先。是约束还是它的约束   在不同的视图层次结构中锚定参考项?那是   非法。”

在viewDidLoad中,我执行以下操作:

let toolBar = UIToolbar()
var items = [UIBarButtonItem]()

items.append(
    UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
)

items.append(
    UIBarButtonItem(title: "Tool Bar Text", style: .plain, target: self, action: #selector(confirmSignature))
)

items.append(
    UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
)

toolBar.setItems(items, animated: true)
toolBar.tintColor = .white
toolBar.barTintColor = UIColor.red



toolBar.translatesAutoresizingMaskIntoConstraints = false


if #available(iOS 11.0, *) {
    let guide = self.view.safeAreaLayoutGuide
    toolBar.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
    toolBar.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
    toolBar.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true
    toolBar.heightAnchor.constraint(equalToConstant: 80).isActive = true

}
else {
    NSLayoutConstraint(item: toolBar, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: toolBar, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: toolBar, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true

    toolBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
}

exampleTextField.inputAccessoryView = toolBar

作为扩展,当选择文本字段时,我将执行以下操作:

extension myTableViewName: UITextFieldDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {
        if textField == exampleTextField {
            let toolBar = UIToolbar()

            view.addSubview(toolBar)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

注释这些行(textfield附件和视图之间没有通用视图)

let guide = self.view.safeAreaLayoutGuide
toolBar.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
toolBar.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
toolBar.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true

由于toolBar输入视图将始终占据屏幕底部的整个宽度且具有指定的高度,因此只能保留此

toolBar.heightAnchor.constraint(equalToConstant: 80).isActive = true

答案 1 :(得分:0)

toolBar不会作为错误消息状态添加到视图。

self.view.addSubview(toolBar)