将MPVolumeView包装在2个堆栈布局中(Xamarin.IOS)

将MPVolumeView包装在2个堆栈布局中(Xamarin.IOS),xamarin,xamarin.ios,mpvolumeview,custom-renderer,Xamarin,Xamarin.ios,Mpvolumeview,Custom Renderer,我正在创建一个基于通用视图的控件,该视图与基于iOS MPVolumeView的自定义渲染器一起工作,该控件是一个简单的控件,允许您为应用程序中的音频选择备用输出路径(即蓝牙扬声器)。如果我将代码封装在一个堆栈布局中,那么代码就可以正常工作,但如果它位于两个堆栈布局中,则代码就不能正常工作。我的XAML看起来像这样。。。非常基本: <?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin

我正在创建一个基于通用视图的控件,该视图与基于iOS MPVolumeView的自定义渲染器一起工作,该控件是一个简单的控件,允许您为应用程序中的音频选择备用输出路径(即蓝牙扬声器)。如果我将代码封装在一个堆栈布局中,那么代码就可以正常工作,但如果它位于两个堆栈布局中,则代码就不能正常工作。我的XAML看起来像这样。。。非常基本:

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DABApp.DabTestPage" xmlns:local="clr-namespace:DABApp;assembly=DABApp">
<ContentPage.Content>
    <StackLayout VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="Red">
        <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="FillAndExpand">
            <local:AudioOutputView />
        </StackLayout>
    </StackLayout>
</ContentPage.Content>
</ContentPage>

以下是我的自定义渲染器的精髓:

[assembly: ExportRenderer(typeof(AudioOutputView), typeof(iosAudioOutputViewRenderer))]
namespace DABApp.iOS
{
public class iosAudioOutputViewRenderer: ViewRenderer<AudioOutputView, UIView>
{
    MPVolumeView view;

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

        if (Control == null)
        {
            view = new MPVolumeView()
            {
                ShowsRouteButton = true,
                ShowsVolumeSlider = false,

            };
            SetNativeControl(view);
        }
    }
}
}
[程序集:ExportRenderer(typeof(AudioOutputView)、typeof(iosAudioOutputViewRenderer))]
名称空间DABApp.iOS
{
公共类IOSSaudioOutputViewRenderer:ViewRenderer
{
MPVolumeView视图;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
视图=新的MPVolumeView()
{
ShowsRouteButton=true,
ShowsVolumeSlider=false,
};
SetNativeControl(视图);
}
}
}
}
使用这个XAML和代码,当我将页面异步推送到nav堆栈上时,页面甚至不会显示。如果我删除其中一个StackLayout,它就可以正常工作

我将CustomRenderer中的IOS控件更改为简单的UILabel,效果很好。。。因此,看起来它与将MPVolumeView放入2个StackLayouts中有关。我需要能够做到这一点,因为我的应用程序的布局要求,它没有任何意义,为什么1 StackLayout是好的,但2不是,只有这个本机控件


有什么想法吗?

我想知道这是否是一个尺寸问题?您可以尝试对内部
堆栈布局使用
中心
填充
吗?例如,HorizontalOptions=“Center”VerticalOptions=“Fill”>我想我可能已经试过了,但我不确定。我们将在几周后回到这条路上,如果成功的话,我会在这里发帖。