iOS中的InputTransparent

时间:2017-08-29 02:55:43

标签: ios listview xamarin xamarin.forms

这是我的XAML。 ContentView位于AbsoluteLayout内,但我认为不重要。我们的想法是拥有一个带有列表视图的框架,以及一个围绕它的黑暗背景。如果用户点击Overlay_Tapped

之外,我希望收到Frame

在iOS中,永远不会调用SpinnerList_ItemSelected。相反,即使用户点击 Overlay_TappedFrame也是如此。在Android中一切都很好。

我尝试在InputTransparent="False"Frame甚至ListView中设置ViewCell。没有帮助。有用的是在NumberOfTapsRequired="2"中设置TapGestureRecognizer,但这显然不是我的意图。

帮助?

    <ContentView
        x:Name="SpinnerOverlay"
        AbsoluteLayout.LayoutBounds="0,0,1,1"
        AbsoluteLayout.LayoutFlags="All"
        IsVisible="False"
        InputTransparent="False"
        BackgroundColor="{x:Static engine:LmcColor.overlay}">

        <Frame
            OutlineColor="Black"
            Padding="10,10,10,10"
            BackgroundColor="White"
            HorizontalOptions="Center"
            VerticalOptions="Center">

            <ListView
                x:Name="SpinnerList"
                HorizontalOptions="Center"
                VerticalOptions="Center"
                HasUnevenRows="False"
                SeparatorColor="Transparent"
                ItemSelected="SpinnerList_ItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <ContentView
                                    Padding="5,0,5,0"
                                    BackgroundColor="{Binding BackColor}">
                                <Label
                                        Text="{Binding ItemText}"
                                        Style="{StaticResource StandardStyle}"/>
                            </ContentView>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Frame>

        <ContentView.GestureRecognizers>
            <TapGestureRecognizer Tapped="Overlay_Tapped"/>
        </ContentView.GestureRecognizers>
    </ContentView>

1 个答案:

答案 0 :(得分:0)

the link suggested by Sharada中描述的方法对我不起作用。它旨在确保在覆盖视图的情况下,&#34;更低的&#34;一个人有时会得到水龙头。我需要相反:我的点击需要转到顶部视图,但它会被包含range捕获并处理。重新定义ContentView对此没有帮助。

但尝试这种方法将我推向了自定义渲染器,我最终能够解决我的问题。我只是定义了一个&#34; native&#34; iOS手势识别器而不是HitTest()。如果我对本机iOS开发更熟悉,我可能会提前做到这一点。我是一个Android家伙。

这是自定义渲染器代码。 Xamarin.Forms是我在较小的子视图中确定点击的方式。我使用viewWithPoint.Frame.Size.Equals(Frame.Size)代替VisualElementRenderer<ContentView>,因为后者无法正确处理ViewRenderer

BackgroundColor