Xamarin.forms Xamarin表单输入框在iOS中不会水平滚动
如果我在Xamarin Forms项目中有一个Xamarin.forms Xamarin表单输入框在iOS中不会水平滚动,xamarin.forms,Xamarin.forms,如果我在Xamarin Forms项目中有一个条目,并且我一直在上面键入,直到它离开可查看页面的末尾,文本在iOS中不会像在Android上那样水平滚动-有没有办法让它这样做 我试着用编辑器替换它,但它没有占位符,我需要占位符。一个条目在iOS上呈现为UITextField,它不支持滚动。编辑器呈现为不支持滚动的UITextView 一个选项是创建包含占位符的自定义编辑器 我有这方面的代码。虽然不漂亮,但很管用 以下是CustomEditor代码,包括占位符文本和颜色的新可绑定属性 pub
条目
,并且我一直在上面键入,直到它离开可查看页面的末尾,文本在iOS中不会像在Android上那样水平滚动-有没有办法让它这样做
我试着用编辑器替换它,但它没有占位符,我需要占位符。一个条目在iOS上呈现为UITextField,它不支持滚动。编辑器呈现为不支持滚动的UITextView 一个选项是创建包含占位符的自定义编辑器 我有这方面的代码。虽然不漂亮,但很管用 以下是CustomEditor代码,包括占位符文本和颜色的新可绑定属性
public class CustomEditor : Editor
{
public static readonly BindableProperty PlaceholderProperty =
BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(CustomEditor), default(string));
public string Placeholder
{
get { return (string)GetValue(PlaceholderProperty); }
set { SetValue(PlaceholderProperty, value); }
}
public static readonly BindableProperty PlaceholderColorProperty =
BindableProperty.Create(nameof(PlaceholderColor), typeof(Color), typeof(CustomEditor), default(Color));
public Color PlaceholderColor
{
get { return (Color)GetValue(PlaceholderColorProperty); }
set { SetValue(PlaceholderColorProperty, value); }
}
public static readonly BindableProperty DisabledColorProperty =
BindableProperty.Create(nameof(DisabledColor), typeof(Color), typeof(CustomEditor), default(Color));
public Color DisabledColor
{
get { return (Color)GetValue(DisabledColorProperty); }
set { SetValue(DisabledColorProperty, value); }
}
}
这是iOS自定义渲染器
[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]
namespace Test.iOS.CustomRenderers
{
public class CustomEditorRenderer : EditorRenderer
{
private UILabel PlaceholderLabel { get; set; }
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if (Control == null) return;
Control.Layer.BorderWidth = 0.5f;
Control.Layer.CornerRadius = 8;
Control.Layer.BorderColor = Color.FromHex("CDCDCD").ToCGColor();
if (PlaceholderLabel != null) return;
var element = Element as CustomEditor;
PlaceholderLabel = new UILabel
{
Text = element?.Placeholder,
TextColor = element?.PlaceholderColor.ToUIColor(),
BackgroundColor = UIColor.Clear
};
var edgeInsets = Control.TextContainerInset;
var lineFragmentPadding = Control.TextContainer.LineFragmentPadding;
Control.AddSubview(PlaceholderLabel);
var vConstraints = NSLayoutConstraint.FromVisualFormat(
"V:|-" + edgeInsets.Top + "-[PlaceholderLabel]-" + edgeInsets.Bottom + "-|", 0, new NSDictionary(),
NSDictionary.FromObjectsAndKeys(
new NSObject[] { PlaceholderLabel }, new NSObject[] { new NSString("PlaceholderLabel") })
);
var hConstraints = NSLayoutConstraint.FromVisualFormat(
"H:|-" + lineFragmentPadding + "-[PlaceholderLabel]-" + lineFragmentPadding + "-|",
0, new NSDictionary(),
NSDictionary.FromObjectsAndKeys(
new NSObject[] { PlaceholderLabel }, new NSObject[] { new NSString("PlaceholderLabel") })
);
PlaceholderLabel.TranslatesAutoresizingMaskIntoConstraints = false;
Control.AddConstraints(hConstraints);
Control.AddConstraints(vConstraints);
PlaceholderLabel.Hidden = Element.Text.NotEmpty();
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "Text")
{
PlaceholderLabel.Hidden = Control.Text.NotEmpty();
}
if (e.PropertyName == VisualElement.IsEnabledProperty.PropertyName)
{
var element = Element as CustomEditor;
SetTextColor(element);
}
}
private void SetTextColor(CustomEditor element)
{
Control.TextColor = element.IsEnabled ? element.TextColor.ToUIColor() : element.DisabledColor.ToUIColor();
}
}
}
[程序集:ExportRenderer(typeof(CustomEditor)、typeof(CustomEditorRenderer))]
命名空间Test.iOS.CustomRenders
{
公共类CustomEditorRenderer:EditorRenderer
{
专用UILabel占位符标签{get;set;}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)返回;
Control.Layer.BorderWidth=0.5f;
Control.Layer.CornerRadius=8;
Control.Layer.BorderColor=Color.FromHex(“CDCDCD”).togcolor();
如果(占位符标签!=null)返回;
var element=作为CustomEditor的元素;
占位符标签=新UILabel
{
Text=元素?.占位符,
TextColor=element?.PlaceholderColor.ToUIColor(),
BackgroundColor=UIColor.Clear
};
var edgeInsets=Control.TextContainerSet;
var lineFragmentPadding=Control.TextContainer.lineFragmentPadding;
Control.AddSubview(占位符标签);
var vConstraints=NSLayoutConstraint.FromVisualFormat(
“V:|-”+edgeInsets.Top+”-[Placeholder Label]-“+edgeInsets.Bottom+”-“|”,0,新NSDictionary(),
NSDictionary.FromObjectsAndKeys(
新NSObject[]{Placeholder Label},新NSObject[]{new NSString(“Placeholder Label”)})
);
var hConstraints=NSLayoutConstraint.FromVisualFormat(
“H:|-”+lineFragmentPadding+“-[PlaceholderLabel]-“+lineFragmentPadding+”-|“,
0,新的NSDictionary(),
NSDictionary.FromObjectsAndKeys(
新NSObject[]{Placeholder Label},新NSObject[]{new NSString(“Placeholder Label”)})
);
Placeholder Label.TranslatesAutoResizezingMaskintoConstraints=false;
控制。添加约束(hConstraints);
控制。添加约束(vConstraints);
占位符label.Hidden=Element.Text.NotEmpty();
}
受保护的覆盖无效OneElementPropertyChanged(对象发送方,System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
如果(例如,PropertyName==“文本”)
{
占位符label.Hidden=Control.Text.NotEmpty();
}
if(e.PropertyName==VisualElement.IsEnabledProperty.PropertyName)
{
var element=作为CustomEditor的元素;
色(元素);
}
}
私有void SetTextColor(CustomEditor元素)
{
Control.TextColor=element.IsEnabled?element.TextColor.ToUIColor():element.DisabledColor.ToUIColor();
}
}
}