             }
         }
         if expressions["left"] == nil, expressions["right"] != nil {
+            _getters["left"] = nil
             expressions["left"] = "right - width"
         }
         if expressions["height"] == nil {
+            _getters["height"] = nil
             if _class is UIStackView.Type {
                 expressions["height"] = "auto" // TODO: remove special case
             } else if expressions["top"] != nil, expressions["bottom"] != nil {

                }
                let mirror = Mirror(reflecting: instance)
                if mirror.children.contains(where: { $0.label == symbol }) {
                    throw LayoutError("\(_class) \(symbol) property must be prefixed with @objc to be used with Layout")
                }
                throw SymbolError("Unknown property \(symbol)", for: symbol)
            }

    // MARK: expressions

    private func overrideExpressions() {
        assert(_setupComplete && !_expressionsSetUp && _view != nil)
        expressions = _originalExpressions

        // layout props
        if expressions["width"] == nil {
            _getters["width"] = nil
            if expressions["left"] != nil, expressions["right"] != nil {
                expressions["width"] = "right - left"
            } else if !(_view is UIScrollView),
