         contentView.addSubview(v)
         return v
     }
+
+    // MARK: Helpers
+
+    private func setImageSize(size: CGSize) {
+        imageSizeConstraints.width?.constant  = size.width
+        imageSizeConstraints.height?.constant = size.height
+    }
+
+    private func setTextImageSpacing(value: CGFloat) {
+        imageAndTitleSpacingConstraint?.constant = value
+    }
 }
 
 // MARK: UIAppearance Properties

    }

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

    /// The space between image and text. The default value is `8`.
    public var textImageSpacing: CGFloat = 8 {
        didSet {
            imageAndTitleSpacingConstraint?.constant = textImageSpacing
        }
    }

    /// The default value is `false`.
    public var isImageViewHidden: Bool = false {
        didSet {
            guard oldValue != isImageViewHidden else { return }
            if isImageViewHidden {
                imageSize        = .zero
                textImageSpacing = 0
            } else {
                imageSize        = CGSize(width: 55, height: 55)
                textImageSpacing = paddingSmall
            }
        }
    }

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

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

public class DynamicTableViewCell: BaseTableViewCell {
    public override class var reuseIdentifier: String { return "DynamicTableViewCellIdentifier" }
    private var data: DynamicTableModel!
    private let padding: CGFloat = 15
    private var imageAndTitleSpacingConstraint: NSLayoutConstraint?
    private var imageSizeConstraints: (width: NSLayoutConstraint?,  height: NSLayoutConstraint?)
    private var contentConstraints: (top: NSLayoutConstraint?, left: NSLayoutConstraint?, bottom: NSLayoutConstraint?, right: NSLayoutConstraint?)

    /// 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 dynamic var contentInset = UIEdgeInsets(top: 14, left: 15, bottom: 15, right: 15) {
        didSet {
            contentConstraints.top?.constant    = contentInset.top
            contentConstraints.left?.constant   = contentInset.left
