Обертывание 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 - нет, и только для этого нативного элемента управления.

Есть идеи?

0 ответов

Другие вопросы по тегам