      - returns: True if the title is displayed on the control, false otherwise.
      */
     open func isTitleVisible() -> Bool {
-        return hasText || hasErrorMessage || _titleVisible
+        if errorMessagePlacement == .defaultPlacement {
+            return hasText || hasErrorMessage || _titleVisible
+        }
+        else {
+            return hasText || _titleVisible
+        }
+    }
+    
+    open func isErrorVisible() -> Bool {
+        return hasErrorMessage
     }
 
     fileprivate func updateTitleVisibility(_ animated: Bool = false, completion: ((_ completed: Bool) -> Void)? = nil) {

        super.layoutSubviews()

        titleLabel.frame = titleLabelRectForBounds(bounds, editing: isTitleVisible() || _renderingInInterfaceBuilder)
        lineView.frame = lineViewRectForBounds(bounds, editing: editingOrSelected || _renderingInInterfaceBuilder)
    }


            updatePlaceholder()
        }
    }
    
    open var errorMessagePlacement: ErrorLabelPlacement = .defaultPlacement

    fileprivate func updatePlaceholder() {
        guard let placeholder = placeholder, let font = placeholderFont ?? font else {
