         return [viewController]
     }
 
+    private var _setupComplete = false
     private func completeSetup() {
-        _usesAutoLayout = view.constraints.contains {
+        guard !_setupComplete else { return }
+        _setupComplete = true
+
+        _usesAutoLayout = _view.constraints.contains {
             [.top, .left, .bottom, .right, .width, .height].contains($0.firstAttribute)
         }
 

        guard _suppressUpdates == false else { return }
        defer { _suppressUpdates = false }
        _suppressUpdates = true
        try LayoutError.wrap(updateExpressionValues, for: self)
        for child in children {
            try LayoutError.wrap(child.update, for: self)

                }
            }
        }
        if !equal, _setupComplete {
            // TODO: work out which expressions are actually affected
            attempt(update)
        }
