我已经设置了我的UITextField的LeftView,这样我就可以在文本旁边画一个小图标了。
Password.LeftView = new UIImageView(UIImage.FromBundle("LockAndKey"));
Password.LeftViewMode = UITextFieldViewMode.Always;
这很有效但现在的问题是占位符和实际文本太靠近图像了 - 我想缩进文本。
我需要在Xamarin / iOS中为我的子类UITextField做什么来缩进文本边距?我知道我可以覆盖各种功能,但到目前为止还没有成功使用它。
谢谢!
答案 0 :(得分:5)
您需要扩展/子类化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);
}
这个更干净,作为第一个解决方案,您可以自定义它。