Xamarin iOS - 用左图像填充UITextField
问题描述:
我已经设置了我的UITextField的左视图,以便我可以在文本旁边画一个小图标。Xamarin iOS - 用左图像填充UITextField
Password.LeftView = new UIImageView(UIImage.FromBundle("LockAndKey"));
Password.LeftViewMode = UITextFieldViewMode.Always;
这个伟大的工程,但现在的问题是,占位符和实际文本是太接近的形象 - 我想文本缩进了。
我需要在Xamarin/iOS中为我的子类UITextField使用边距缩进文本做什么?我知道有很多功能可以覆盖,但至今尚未取得成功。
谢谢!
答
您需要扩展/继承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);
}
这一个是清洁,作为第一个解决方案,您可以自定义。
这对我输入后的文本有效,但不是占位符,或者当我输入时。是否有额外的覆盖,我可以为那些?:)非常感谢花时间来帮助我! – NullHypothesis
谢谢!就是这样! – NullHypothesis