对于iOS(4s 5s及以上),我是否需要针对不同的屏幕尺寸使用不同的图像? 我们如何在iOS中使用Xamarin表单在屏幕尺寸和分辨率上设置图像/图标和控件的保留尺寸。 请参考这个来理解问题 Autolayout and proportional positioning
但我需要xamarin表格的解决方案。
答案 0 :(得分:0)
我一直在使用不同的解决方案,如:
命名惯例
iphone 4 = "image.png"
iphone 5,6 (or retina) = "image@2x.png"
iphone 6+ = "image@3x.png"
使用依赖服务获取设备宽度和高度:
的iOS
public double Width
{
get
{
return UIScreen.MainScreen.Bounds.Width;
}
}
public double Height
{
get
{
return UIScreen.MainScreen.Bounds.Height;
}
}
的Android
public double Width
{
get
{
var ctx = Forms.Context;
var metrics = ctx.Resources.DisplayMetrics;
return (ConvertPixelsToDp(metrics.WidthPixels));
}
}
public double Height
{
get
{
var ctx = Forms.Context;
var metrics = ctx.Resources.DisplayMetrics;
return (ConvertPixelsToDp(metrics.HeightPixels));
}
}
然后我可以根据屏幕尺寸调整图像大小,例如ScreenWidth / 3.
答案 1 :(得分:0)
对于iOS,我使用PaintCode。然后我在Xamarin.Forms中有一个名为:IconView的视图和iOS中的自定义渲染器,它使用PaintCode绘制Icon(图像)。
当Xamarin.Forms调整IconView的大小时,自定义渲染器会重绘。 (您必须在OnPropertyChanged方法上重绘:
// IconViewRenderer.cs
...
protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged (sender, e);
if (e.PropertyName == "Icon" || e.PropertyName == "X" || e.PropertyName == "Y" || e.PropertyName == "Width" || e.PropertyName == "Height")
SetNeedsDisplay ();
}
...
public override void Draw (CoreGraphics.CGRect rect)
{
base.Draw (rect);
var iconView = (IconView)Element;
switch (iconView.Icon) {
case IconView.IconKind.SomeIcon:
PaintCode.DrawSomeIcon (rect);
case IconView.IconKind.SomeOtherIcon:
PaintCode.DrawSomeOtherIcon (rect);
....
}
}