设置背景图像的视图与拉伸适合Xamarin

时间:2017-01-09 22:05:49

标签: xamarin xamarin.ios

我是Xamarin的新手。我实际上是在尝试设置视图的背景图像并将其拉伸。

图像为2048x1536像素png。

nfloat vpHeight = View.Bounds.Height;
nfloat vpWidth = View.Bounds.Width;
Console.WriteLine(vpWidth);
Console.WriteLine(vpHeight);

以上代码将返回1024x768(它是横向位置)。

var img = UIImage.FromFile("pages/p1.png");
UIImageView imgView = new UIImageView(img);
imgView.ContentMode = UIViewContentMode.ScaleAspectFit;

var prevPage = new UIView()
{
    Frame = new CoreGraphics.CGRect(0, 0, vpWidth, vpHeight)
};
prevPage.Add(imgView);

这是我设置背景的代码,但结果只是x和y中图像的一半,就像下面的图像一样:

enter image description here

那么,如何使图像适应视图的宽度和高度?

ty !!

2 个答案:

答案 0 :(得分:3)

我会创建一个UIImageView作为背景,如下所示:

var img = UIImage.FromFile("pages/p1.png");
UIImageView imgView = new UIImageView(img);
imgView.ContentMode = UIViewContentMode.ScaleAspectFit;

然后将其添加到您正在使用的任何视图中。

可以像这样使用ContentMode: enter image description here

<强>更新 我会将它添加到prevPage中,如下所示:

var prevPage = new UIView()
{
    Frame = new CoreGraphics.CGRect(0, 0, vpWidth, vpHeight)
};

var img = UIImage.FromFile("pages/p1.png");
UIImageView imgView = new UIImageView(new CGRect(0,0,vpWidth,vpHeight));
imgView.Image = img;
imgView.ContentMode = UIViewContentMode.ScaleAspectFit; // or ScaleAspectFill

prevPage.Add(imgView);

另外值得注意的是,使用View.Bounds定位视图有点笨重。我会看看Autolayout,因为你会遇到不同设备和方向的问题。这些是关于Autolayout的一些很好的教程,它们可能是本机代码,但您正在寻找视图的关系而不是代码。

Raywenderlich tutorial

Other Tutorial

任何有自动布局的问题只是问另一个问题。

答案 1 :(得分:2)

我建议你远离FromPatternImage,除非你真的使用模式

对于最低的内存消耗和最佳的UI性能,我就是这样做的:

1st)使用图像上下文调整图像大小以匹配视图的大小:

UIGraphics.BeginImageContext(View.Frame.Size);
UIImage.FromBundle("bg.jpg").Draw(View.Bounds);
var bgImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();

第2步)在UIImageView中显示已调整大小的图像并将其发送到最低的Z顺序:

var uiImageView = new UIImageView(View.Frame);
uiImageView.Image = bgImage;
View.AddSubview(uiImageView);
View.SendSubviewToBack(uiImageView);