2017-02-13 76 views
2

我已經設置了我的UITextField的左視圖,以便我可以在文本旁邊畫一個小圖標。Xamarin iOS - 用左圖像填充UITextField

Password.LeftView = new UIImageView(UIImage.FromBundle("LockAndKey")); 
Password.LeftViewMode = UITextFieldViewMode.Always; 

這個偉大的工程,但現在的問題是,佔位符和實際文本是太接近的形象 - 我想文本縮進了。

我需要在Xamarin/iOS中爲我的子類UITextField使用邊距縮進文本做什麼?我知道有很多功能可以覆蓋,但至今尚未取得成功。

謝謝!

回答

3

您需要擴展/繼承UITextField類並覆蓋名爲DrawText的方法。在那裏你添加你需要的填充。

public override void DrawText(CGRect rect) 
    { 
     var padding = new UIEdgeInsets (0, 10, 0, 0); 

     base.DrawText(padding.InsetRect(rect)); 
    } 

這將在左側添加10點填充。

爲了讓它更具可定製性,我會添加一個名爲Padding的屬性,其中基本上可以根據情況設置所需的填充。

*更新#1 *

在你想擁有的空間,同時打字,你可以只讓代表您LeftView大一點的寬度的UIImageView並與ViewContentMode

發揮的情況下用你的例子:

var leftView = new UIImageView(UIImage.FromBundle("LockAndKey")); 
leftView.Frame = new CGRect (leftView.Frame.X, leftView.Frame.Y, leftView.Frame.Width + 15, leftView.Frame.Height); 
leftView.ContentMode = UIViewContentMode.Center; 

Password.LeftView = leftView 
Password.LeftViewMode = UITextFieldViewMode.Always; 

有了這個配置,你將在每個ImageView的大小上得7.5分。您可以使用其他ContentMode使其工作,只要你願意。

****更新#2 ****

剛剛發現的另一種方式。

在子類中重寫的UITextField這兩種方法:

public override CGRect TextRect (CGRect forBounds) 
    { 
     var padding = new UIEdgeInsets (0, 20, 0, 0); 

     return base.TextRect (padding.InsetRect(forBounds)); 
    } 

    public override CGRect EditingRect (CGRect forBounds) 
    { 
     return TextRect (forBounds); 
    } 

這一個是清潔,作爲第一個解決方案,您可以自定義。

+0

這對我輸入後的文本有效,但不是佔位符,或者當我輸入時。是否有額外的覆蓋,我可以爲那些?:)非常感謝花時間來幫助我! – NullHypothesis

+0

謝謝!就是這樣! – NullHypothesis