Обертывание MPVolumeView в 2 макета стека (Xamarin.IOS)
Я создаю элемент управления, основанный на универсальном представлении, которое работает с настраиваемым средством визуализации на основе iOS MPVolumeView, который является простым элементом управления, позволяющим выбрать альтернативный маршрут вывода звука в приложении (например, Bluetooth-динамик). Код работает просто отлично, если я обертываю внутри одного макета стека, но не если он находится внутри двух макетов стека. Мой 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);
}
}
}
}
С этим XAML и кодом, когда я помещаю страницу в асинхронный стек стека, страница даже не отображается. Если я удаляю один из StackLayouts, он работает нормально.
Я изменил свой элемент управления IOS в CustomRenderer на простой UILabel, и это прекрасно работает... так что похоже, что он как-то связан с размещением MPVolumeView внутри 2 StackLayouts. Я должен быть в состоянии сделать это из-за требований макета моего приложения, и нет никакого смысла, почему 1 StackLayout подходит, а 2 - нет, и только для этого нативного элемента управления.
Есть идеи?