                             property: Property) {
         self.property = property
         isEditingAllowed = shouldAllowEditing(for: property.type) && editMode
-        labelPropertyTitle.text = propertyTitle
+        let type = property.humanReadable
+        typeView.update(name: propertyTitle, type: type)
         textFieldPropValue.text = propertyValue
         configureToggle(for: property, value: propertyValue)
         configureKeyboard(for: property.type)
-        configureLabelType(for: property)
         configureTextField(for: editMode)
-        setNeedsLayout()
     }
 
     func configureToggle(for property: Property, value: String) {

        return textField
    }()
    
    private lazy var labelPropertyTitle: UILabel = {
        let label = UILabel()
        label.font = UIFont.preferredFont(forTextStyle: .headline)
        contentView.addSubview(label)
        return label
    }()
    
    private lazy var labelPropertyType: UILabel = {
        let label = UILabel()
        label.font = UIFont.preferredFont(forTextStyle: .subheadline)
        contentView.addSubview(label)
        return label
    }()
    
    private lazy var toggle: UISwitch = {
        let toggle = UISwitch()
        toggle.addTarget(self, action: .toggleSwitch, for: .valueChanged)

    }

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        let usableSize = CGSize(width: size.width - 2*margin16, height: .greatestFiniteMagnitude)
        let sizeTypeView = typeView.sizeThatFits(usableSize)
        return CGSize(width: size.width, height: sizeTypeView.height + 2*margin16)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        let usableSize = CGSize(width: contentView.bounds.width - 2*margin16,
                                 height: .greatestFiniteMagnitude)
        let sizeTypeView = typeView.sizeThatFits(usableSize)
        let originType = CGPoint(x: margin16, y: margin16)
        typeView.frame = CGRect(origin: originType, size: sizeTypeView)

        let usableTextFieldWidth = contentView.bounds.width
            - typeView.bounds.width
            - 3*margin16

        let usableTextFieldSize = CGSize(width: usableTextFieldWidth,
                                          height: .greatestFiniteMagnitude)
        let sizeTextField = textFieldPropValue.sizeThatFits(usableTextFieldSize)
        let minWidth = min(sizeTextField.width, usableTextFieldSize.width)
        let originTextField = CGPoint(x: contentView.bounds.width-minWidth-margin16,
                                       y: margin16)
        if let prop = property {
            if prop.type == .bool {
                toggle.frame = CGRect(origin: originTextField,
