我正在尝试使用5个标签实现一个小GridView:
这些标签中的每一个都附加到 TapGestureRecognizer
。
您无法在第一时间看到设置4和5,它们位于屏幕下方。
如果按"More settings"
标签/按钮,则通过“LayoutTo”向上推整个网格,可以看到最后两个设置。
现在我的问题是最后两个标签的最后两个TapGestureRecognizer不起作用。 我在这里发现了一个有类似问题的人: https://forums.xamarin.com/discussion/36094/offscreen-tapgesturerecognizer-not-firing。
我尝试了这篇文章中陈述的所有内容,我将主要布局更改为AbsoluteLayout
,并使用LayoutTo
而不是TranslateTo
,但它仍无效。
如果有人知道如何让这些TapGestureRecognizers
工作或如何解决我用一点动画“拖出”我的GridView条目的问题,而不必依赖于将内容放在屏幕边界之外我会非常高兴。
这里有一些我的xaml代码:
<AbsoluteLayout x:Name="rellay">
<Grid x:Name="MainGrid"
AbsoluteLayout.LayoutBounds="0, 0, 1, .9" AbsoluteLayout.LayoutFlags="SizeProportional">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition x:Name="MapRow" Height="*" />
<RowDefinition x:Name="DataRow" />
</Grid.RowDefinitions>
<maps:Map x:Name="map" Grid.Row="0" />
<Grid RowSpacing="0" ColumnSpacing="0" x:Name="SecondGrid" Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="62" x:Name="StartRow" />
<RowDefinition Height="62" x:Name="DestRow" />
<RowDefinition Height="62" x:Name="OptRow" />
<RowDefinition Height="62" x:Name="NameRow" />
<RowDefinition Height="62" x:Name="PhoneRow" />
<RowDefinition Height="62" x:Name="ZeitRow" />
<RowDefinition Height="62" x:Name="DetailsRow" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="40" />
</Grid.ColumnDefinitions>
... (labels and TapGestureRecognizers)
页面-构造:
DataRow.Height = 3 * 62;
“拖带-按钮”:
OptRow.Height = 0;
rellay.LayoutTo(new Rectangle(0, -3 * 62, rellay.Width, rellay.Height), 250, Easing.Linear);
我还尝试直接将类似于条目的东西放入边界之外的AbsoluteLayout(没有网格),然后用LayoutTo将其推高但是它也不起作用,在这种情况下条目“死”。 / p>
答案 0 :(得分:0)
您的最后两个标签位于MainGrid
,但您将其LayoutBounds
的高度设置为.9。这可能会让这两个标签在MainGrid
之外。即使您在LayoutTo()
AbsoluteLayout时可以看到它们,也无法控制底部区域。这就是为什么你把它改成入门,它也不能被触及。
您可以尝试展开rellay
的高度:rellay.LayoutTo(new Rectangle(0, -3 * 62, rellay.Width, rellay.Height + 3 * 62), 250, Easing.Linear);
以触及这两个标签。但我真的建议你使用ScrollView
。
创建自定义scrollView:
public class MyScrollView : ScrollView
{
}
然后使用此控件包装AbsoluteLayout
<local:MyScrollView x:Name="MyScroll">
...put your other controls here
</local:MyScrollView>
如果要显示标签,请使用以下方法推送:
MyScroll.ScrollToAsync(0, 62 * 3, true);
最后,如果要在触摸和拖动时禁用其滚动,请创建Custom Renderer以实现此目的:
[assembly: ExportRenderer(typeof(MyScrollView), typeof(MyScrollRenderer))]
namespace ExpandLayoutDemo.iOS
{
public class MyScrollRenderer : ScrollViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
ScrollEnabled = false;
}
}
}