插图UITextField,左右不同的值

插图UITextField,左右不同的值

问题描述:

我正在尝试做一个Instagram的克隆,而且我有点卡住了UITextField的自定义。也许是一个noob问题,但它在这里。插图UITextField,左右不同的值

我想要实现的是如果为我的UITextField添加不同的插入,一个在左侧较小,另一个在右侧较大,所以我有足够空间用于UITextField的清除按钮。

我试图做到这一点: Instagram app

,但我得到的最接近的事是这样的: Clone app

正如你可以看到清晰的按钮是我的版本更挤,但我不能处理只插入右侧多一点,而不触及左侧。

我用我的UITextField子类(SWIFT 3)下面的代码:

override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

但它只是让我做展台一侧改变DX。任何建议?在此先感谢

管理由自己来解决它:

override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 16, y: bounds.origin.y, width: bounds.width - 56, height: bounds.height) 
    } 

    override func clearButtonRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.width - 36, y: bounds.origin.y, width: 16, height: bounds.height) 
    } 

这样,它的工作就像Instagram的。当它处于编辑模式时,它更多地插入右侧,并且当它处于正常模式时,它具有16的两侧的插入。

这对我的作品

let rightView = UIView(frame: CGRectMake(0, 0, 16, 16)) 
textField.rightViewMode = UITextFieldViewMode.Always 
textField.rightView = rightView 

let leftView = UIView(frame: CGRectMake(0, 0, 20, 20)) 
textField.leftViewMode = UITextFieldViewMode.Always 
textField.leftView = leftView 

愿它可以帮助你。

+0

我也尝试过这一点,但这种方法的问题在于,至少在斯威夫特3,当您使用rightView清除按钮消失了......无论如何,我找到了一种方法来做到这一点 –