如何在Xamarin窗体自定义渲染器中获取UIView大小

如何在Xamarin窗体自定义渲染器中获取UIView大小,xamarin,xamarin.forms,uiview,xamarin.ios,Xamarin,Xamarin.forms,Uiview,Xamarin.ios,我在Xamarin表单中创建了一个自定义视图渲染器,希望知道视图的大小,以便添加具有绝对位置的子视图 protected override void OnElementChanged(ElementChangedEventArgs<MyView> e) { base.OnElementChanged(e); if (e.NewElement != null) { if (Control == null) {

我在Xamarin表单中创建了一个自定义视图渲染器,希望知道视图的大小,以便添加具有绝对位置的子视图

protected override void OnElementChanged(ElementChangedEventArgs<MyView> e)
{
     base.OnElementChanged(e);

     if (e.NewElement != null)
     {
         if (Control == null)
         {
             var uiView = new UIView
             {
                 BackgroundColor = UIColor.SystemPinkColor
             };

             SetNativeControl(uiView);

             // How to get uiView width and height in absolute numbers?
         }
     }
}
当我检查uiView.Frame时,宽度和高度都是0


在PCL中,MyView显示为网格元素的子元素。

很抱歉,无法从OneElementChanged方法获取视图大小,因为此方法与ViewDidLoad方法相同。在这一阶段,还没有计算出视角

我们可以通过画图的方法得到宽度和高度,这个stage viewcontroller将根据帧的大小开始在屏幕上绘制视图。因此,我们现在肯定可以得到尺寸

UIView uIView;

public override void Draw(CGRect rect)
{
    base.Draw(rect);
    Console.WriteLine("------------x" + uIView.Frame.Size.Width);
    Console.WriteLine("------------x" + Control.Frame.Size.Width);
    Console.WriteLine("------------x" + Control.Bounds.Size.Width);
}
或生命周期在OneElementChanged之后的其他方法。例如LayoutSubviews方法:

输出:

2020-06-16 10:59:11.327982+0800 AppFormsTest.iOS[30355:821323] ------------375
2020-06-16 10:59:11.328271+0800 AppFormsTest.iOS[30355:821323] ------------375
2020-06-16 10:59:11.328497+0800 AppFormsTest.iOS[30355:821323] ------------375
2020-06-16 10:59:11.327982+0800 AppFormsTest.iOS[30355:821323] ------------375
2020-06-16 10:59:11.328271+0800 AppFormsTest.iOS[30355:821323] ------------375
2020-06-16 10:59:11.328497+0800 AppFormsTest.iOS[30355:821323] ------------375