     
     private func computeLeftInsetToText() -> CGFloat {
         
-        if clearButtonPosition == .left {
-            return horizontalTextPadding + clearButtonRect(forBounds: bounds).maxX
+        let inset: CGFloat
+        if isLeftViewVisible && leftViewPosition == .left {
+            inset = leftViewRect(forBounds: bounds).maxX + Constants.overlaySpaceToText
+        } else if isRightViewVisible && rightViewPosition == .left {
+            inset = leftViewRect(forBounds: bounds).maxX + Constants.overlaySpaceToText
+        } else if isClearButtonVisible() && clearButtonPosition == .left {
+            inset = clearButtonRect(forBounds: bounds).maxX + Constants.overlaySpaceToText
         } else {
-            return horizontalTextPadding
-        }
+            inset = horizontalTextPadding
+        }
+        
+        return inset
     }
     
     private func computeBottomInsetToText() -> CGFloat {

    
    private func leftAlignedPlaceholderTranslation() -> CGFloat {
        
        return 0.5 * (1.0 - placeholderScaleWhenEditing) * placeholderLabel.bounds.width * -1.0
    }
    
    private func rightAlignedPlaceholderTranslation() -> CGFloat {
        
        return 0.5 * (1.0 - placeholderScaleWhenEditing) * placeholderLabel.bounds.width
    }
    
    private func placeholderTransformForBasePosition() -> CATransform3D {

        placeholderLabel.layer.removeAllAnimations()
        
        let animation = CABasicAnimation(keyPath: "transform")
        animation.duration = placeholderAnimationDuration ?? Constants.defaultPlaceholderAnimationDuration
        animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
        let fromValue = placeholderLabel.layer.presentation()?.transform ?? placeholderLabel.layer.transform
        animation.fromValue = fromValue
