2016-09-28 9 views
0

Instagramのクローンを作成しようとしていますが、私は少しUITextFieldのカスタマイズをしました。たぶん、ノブの質問ですが、ここでそれは行く。Inset UITextField、左右に異なる値を持つ

私はUITextFieldのための異なるインセットを持っていますが、左側が1つ小さく、右側が1つ大きいので、私はUITextFieldのクリアボタンのために十分なスペースを持っています。

私はこれを達成しようとしています: Instagram app

を私が得る最も近いものはこれです:あなたはクリアボタンが私のバージョンではるかにスクイズですが、私見ることができるように Clone app

左のものに触れることなく、ちょうど右のほうにちょっとだけ差し込むことはできません。

私は私のUITextFieldのサブクラス(スウィフト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のためにそれをやらせます。なにか提案を?事前に感謝

答えて

0

は自分でそれを解決するために管理:

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の両サイドのインセットを有する。

0

これは私

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

私もこれを試しましたが、このアプローチの問題は、少なくともSwift 3では、rightViewを使用するとクリアボタンが消えてしまうことです...とにかく私はそうする方法を見つけました –

関連する問題