将MPVolumeView包装在2个堆栈布局中(Xamarin.IOS)
我正在创建一个基于通用视图的控件,该视图与基于iOS MPVolumeView的自定义渲染器一起工作,该控件是一个简单的控件,允许您为应用程序中的音频选择备用输出路径(即蓝牙扬声器)。如果我将代码封装在一个堆栈布局中,那么代码就可以正常工作,但如果它位于两个堆栈布局中,则代码就不能正常工作。我的XAML看起来像这样。。。非常基本:将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
<?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”>我想我可能已经试过了,但我不确定。我们将在几周后回到这条路上,如果成功的话,我会在这里发帖。