Невозможно одновременно выполнить ограничения inputAccessoryView

#swift #xcode #uikit #nslayoutconstraint #inputaccessoryview

Вопрос:

У меня есть inputAccessoryView с одной кнопкой. Тем не менее, я получаю следующий результат.

введите описание изображения здесь

Я настроил свой InputAccessoryView в моем ViewController , как показано ниже;

 lazy var customInputView: ButtonInputView = {
    let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50)
    let view = ButtonInputView(frame: frame)
    view.doneButton.addTarget(self, action: #selector(signIn), for: .touchUpInside)
    return view
}()

override var inputAccessoryView: UIView? {
    return customInputView
}
 

Xcode нарушает ограничение по высоте 50, установленное в рамке моего представления. Есть какая-нибудь причина, почему??

ПОЛЬЗОВАТЕЛЬСКИЙ КЛАСС ПРЕДСТАВЛЕНИЯ ВВОДА АКСЕССУАРОВ

 class ButtonInputView: UIView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUpView()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    lazy var doneButton: UIButton = {
        let view = UIButton()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = Color.accent
        view.setTitle("Done", for: .normal)
        view.titleLabel?.font = Font.mainButton
        view.layer.cornerRadius = 19
        return view
    }()

    let separator: UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = .opaqueSeparator
        return view
    }()

    private func setUpView() {
        backgroundColor = Color.background
        addSubview(doneButton)
        addSubview(separator)
        let separatorHeight = (1 / (UIScreen.main.scale))

        if let titleLabelText = doneButton.titleLabel?.text {
            doneButton.widthAnchor.constraint(equalToConstant: titleLabelText.width(usingFont: Font.mainButton)   32).isActive = true
        }

        NSLayoutConstraint.activate([
            separator.topAnchor.constraint(equalTo: topAnchor),
            separator.leadingAnchor.constraint(equalTo: leadingAnchor),
            separator.trailingAnchor.constraint(equalTo: trailingAnchor),
            separator.heightAnchor.constraint(equalToConstant: separatorHeight),
            doneButton.topAnchor.constraint(equalTo: separator.bottomAnchor, constant: 6),
            doneButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16),
            doneButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -6),
        ])
    }
    
    override var intrinsicContentSize: CGSize {
        return CGSize.zero
    }
    
    override func didMoveToWindow() {
        super.didMoveToWindow()
        if #available(iOS 11.0, *) {
            if let window = window {
                bottomAnchor.constraint(lessThanOrEqualToSystemSpacingBelow: window.safeAreaLayoutGuide.bottomAnchor,
                                        multiplier: 1.0).isActive = true
            }
        }
    }
}
 

Комментарии:

1. Чего вы пытаетесь достичь в своей didMoveToWindow() работе? Без этого (или просто без назначения bottomAnchor.constraint(...) внутренней части) конфликт исчезнет.