         contentView.addSubview(v)
         return v
     }
-}
-
-// MARK: UIAppearance Properties
-
-public extension DynamicTableViewCell {
-    public dynamic func setDefaultImageSize(size: CGSize) {
+
+    // MARK: Helpers
+
+    private func updateImageSizeIfNeeded() {
+        let size = isImageViewHidden ? .zero : imageSize
         imageSizeConstraints.width?.constant  = size.width
         imageSizeConstraints.height?.constant = size.height
     }
 
-    public dynamic func setDefaultTextImageSpacing(value: CGFloat) {
-        imageAndTitleSpacingConstraint?.constant = value
-    }
-
-    public dynamic func setDefaultContentInset(value: UIEdgeInsets) {
-        contentInset = value
-    }
-
+    private func updateTextImageSpacingIfNeeded() {
+        let spacing = isImageViewHidden ? 0 : textImageSpacing
+        imageAndTitleSpacingConstraint?.constant = spacing
+    }
+}
+
+// MARK: UIAppearance Properties
+
+public extension DynamicTableViewCell {
     public dynamic var titleColor: UIColor? {
         get { return titleLabel.textColor }
         set { titleLabel.textColor = newValue }


    /// The distance that the view is inset from the enclosing  content view.
    /// The default value is `UIEdgeInsets(top: 14, left: 15, bottom: 15, right: 15)`.
    public var contentInset = UIEdgeInsets(top: 14, left: 15, bottom: 15, right: 15) {
        didSet {
            contentConstraints.top?.constant    = contentInset.top
            contentConstraints.left?.constant   = contentInset.left

    }

    /// The default size is `55,55`.
    public dynamic var imageSize = CGSize(width: 55, height: 55) {
        didSet {
            updateImageSizeIfNeeded()
        }
    }

    /// The space between image and text. The default value is `8`.
    public dynamic var textImageSpacing: CGFloat = 8 {
        didSet {
            updateTextImageSpacingIfNeeded()
        }
    }

    /// The default value is `false`.
    public dynamic var isImageViewHidden: Bool = false {
        didSet {
            guard oldValue != isImageViewHidden else { return }
            avatarView.hidden = isImageViewHidden
            updateImageSizeIfNeeded()
            updateTextImageSpacingIfNeeded()
        }
    }

    /// The default value is `true`.
    public dynamic var isRoundImageView = true {
        didSet {
            avatarView.layer.cornerRadius = isRoundImageView ? imageSize.height / 2 : 0
        }
    }

    /// The background color of the cell when it is highlighted.
    public dynamic var highlightedBackgroundColor: UIColor?
    private var regularBackgroundColor: UIColor?
    private var observeBackgroundColorSetter = true
    public override var backgroundColor: UIColor? {
