我是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中图像的一半,就像下面的图像一样:
那么,如何使图像适应视图的宽度和高度?
ty !!
答案 0 :(得分:3)
我会创建一个UIImageView
作为背景,如下所示:
var img = UIImage.FromFile("pages/p1.png");
UIImageView imgView = new UIImageView(img);
imgView.ContentMode = UIViewContentMode.ScaleAspectFit;
然后将其添加到您正在使用的任何视图中。
<强>更新强> 我会将它添加到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的一些很好的教程,它们可能是本机代码,但您正在寻找视图的关系而不是代码。
任何有自动布局的问题只是问另一个问题。
答案 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);