     public var placeholderInsets: UIEdgeInsets = UIEdgeInsets.zero {
         didSet(oldValue) {
             if self.placeholderInsets != oldValue {
-                self.setNeedsLayout()
+                self.setNeedsUpdateConstraints()
             }
         }
     }

    
    open func beginEditing() {
        self._field.becomeFirstResponder()
    }
    
    open override func layoutSubviews() {
        super.layoutSubviews()
        
        let placeholderAvailableRect = self.bounds.inset(by: self.placeholderInsets)
        let placeholderFitSize = self._placeholderLabel.sizeThatFits(placeholderAvailableRect.size)
        self._placeholderLabel.frame = CGRect(
            origin: placeholderAvailableRect.origin,
            size: CGSize(
                width: placeholderAvailableRect.width,
                height: placeholderFitSize.height
            )
        )
    }
    
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        return self._field.sizeThatFits(size)
    }
    
    open override func sizeToFit() {
        return self._field.sizeToFit()
    }
    
    public func apply(_ styleSheet: QMultiTextFieldStyleSheet) {

    public var onEndEditing: Closure?
    public var onPressedAction: ActionClosure?
    public var onChangedHeight: Closure?

    private var _placeholderLabel: QLabel!
    private var _field: Field!
    private var _fieldDelegate: FieldDelegate!
    private var _observer: QObserver< IQMultiTextFieldObserver > = QObserver< IQMultiTextFieldObserver >()
    private var _constraints: [NSLayoutConstraint] = [] {
        willSet { self.removeConstraints(self._constraints) }
        didSet { self.addConstraints(self._constraints) }
    }
    
    open override func setup() {
        super.setup()
