         return paddingX
     }
     
+    fileprivate var fontHeight:CGFloat{
+        return ceil(font!.lineHeight)
+    }
+    
     fileprivate var dtLayerHeight:CGFloat{
-        
         return showErrorLabel ? floor(bounds.height - lblError.bounds.size.height - paddingYErrorLabel) : bounds.height
     }
     

                return insetRectForEmptyBounds(rect: rect)
            }else{
                let topInset = paddingYFloatLabel + lblFloatPlaceholder.bounds.size.height + (paddingHeight / 2.0)
                let textOriginalY = (rect.height - font!.lineHeight) / 2.0
                let textY = textOriginalY - topInset
                return CGRect(x: x, y: -ceil(textY), width: rect.size.width - paddingX, height: rect.size.height)
            }
        }
    }

        
        guard showErrorLabel else { return CGRect(x: x, y: 0, width: rect.width - paddingX, height: rect.height) }
        
        let topInset = (rect.size.height - lblError.bounds.size.height - paddingYErrorLabel - fontHeight) / 2.0
        let textY = topInset - ((rect.height - fontHeight) / 2.0)
        
        return CGRect(x: x, y: floor(textY), width: rect.size.width - paddingX, height: rect.size.height)
    }
    
    fileprivate func insetRectForBounds(rect:CGRect) -> CGRect {
