C# 从子视图单触设置位置

C# 从子视图单触设置位置,c#,.net,uiview,xamarin.ios,value-type,C#,.net,Uiview,Xamarin.ios,Value Type,嘿,伙计们,我刚接触MonoTouch,有个问题。 你们谁能告诉我如何设置子视图的位置吗? 我试过这个: UIImageView imageview = new UIImageView(this.ImageSource); this.AddSubview(imageview); this.Subviews[0].Bounds.X = 30; 我希望你们中的任何人都能帮助我 谢谢属性Bounds为您提供了视图的边界。 如果要重新定位,请使用: var vourView = this.Subv

嘿,伙计们,我刚接触MonoTouch,有个问题。 你们谁能告诉我如何设置子视图的位置吗? 我试过这个:

UIImageView imageview = new UIImageView(this.ImageSource);

this.AddSubview(imageview);

this.Subviews[0].Bounds.X = 30;
我希望你们中的任何人都能帮助我


谢谢属性
Bounds
为您提供了视图的边界。 如果要重新定位,请使用:

var vourView = this.Subviews[0];
yourView.Frame = new RectangleF(new PointF(x, y), yourView.Bounds.Size);


除了
Bounds
Frame
(由@Krumelur提到)之外,您的代码中还有一个.NET问题

RectangleF
是值类型(struct),而不是引用类型。如果不创建新实例(直接或间接),则无法在.NET中更改其属性/字段

i、 e.
Bounds
的属性getter将始终返回一个新实例。因此,30的赋值是在与
子视图[0]
使用的实例不同的实例上完成的

证明:

Console.WriteLine (Object.ReferenceEquals (this.Subviews[0].Bounds,
    this.Subviews[0].Bounds)); // prints 'False'
因此,在这种情况下,您需要做的是:

var bounds = this.Subviews[0].Bounds;
bounds.X = 30.0f;
this.Subviews[0].Bounds = bounds;
因此,新的
RectangleF
(struct)实例被分配回
Bounds
属性(使用您设置的新值)

var bounds = this.Subviews[0].Bounds;
bounds.X = 30.0f;
this.Subviews[0].Bounds = bounds;