我的 MAUI
应用程序中有一个 ContentPage
。此页面有一个标签和条目列表,最后有 2 个按钮:
<ScrollView>
<VerticalStackLayout>
<Picker ItemsSource="{Binding WordTypes}"
SelectedItem="{Binding WordTypeText}" />
<Label Text="label_x" />
<Entry Text="{Binding entry_x}" />
<StackLayout IsVisible="false">
<StackLayout.Triggers>
<!-- Spanish -->
<MultiTrigger TargetType="StackLayout">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding WordTypeText}"
Value="Verb" />
</MultiTrigger.Conditions>
<Setter Property="IsVisible" Value="true" />
</MultiTrigger>
</StackLayout.Triggers>
<!-- More labels and entries -->
</StackLayout>
<!-- More labels and entries -->
<Button Text="Cancel"
Clicked="buttonCancel_Clicked" />
<Button Text="Save"
Clicked="buttonSave_Clicked" />
</VerticalStackLayout>
</ScrollView>
WordTypes
有 2 个值:动词 和 名词。当 WordTypeText
具有值 Verb 时,我想显示更多标签和条目。
该应用程序可在每个平台上运行。
仅在 iOS 和 MacCatalyst 中存在一个有趣的行为。如果我必须滚动 ContentPage
才能单击保存按钮,应用程序不会触发函数 buttonSave_Clicked
。如果在 MacCatalyst 中我调整窗口大小,则可以单击该按钮并按我的预期工作。
视觉示例。在 MacCatalyst 中,我有这个窗口,如果我单击“保存”按钮,它就不起作用。
如果我调整窗口大小(只有几个像素),它就可以工作。
还有其他人遇到过这个问题吗?如何针对 iOS 和 MacCatalyst 修复此问题?
更新
我阅读了 GitHub 上的建议帖子我尝试遵循他们所说的有效方法。
我尝试在页面的构造函数中添加此代码
MyVerticalStackLayout.SizeChanged += (object sender, EventArgs e) =>
{
(MyScrollView as IView).InvalidateMeasure();
}
但它现在可以工作了。另一种解决方法是在页面底部添加一个框,例如
<BoxView BackgroundColor="Transparent" HeightRequest="200" />
结果是...
如您所见,Transparent
BackgroundColor
正在工作,但我仍然无法单击该按钮。
我在 NET8 中看到此问题已修复,但无法将 NET8 与 Visual Studio for Mac 一起使用,对于 Windows,我必须安装 Visual Studio 的预发行版。
最佳答案
已在 .Net 8 预览版中修复:iOS ScrollView ContentSize (content beyond screen) .
直到向后移植到 .Net 7:
作为临时解决方法,请将按钮移到 ScrollView 之外。
在其他情况下,调用
myScrollView.InvalidateMeasure();
(或者可能myPage.InvalidateMeasure();
- 从第二个链接问题中的评论中不清楚.)有时会修复。例如。当scrollview滚动时触发的事件,调用它。
关于maui - 在 iOS 和 MacCatalyst 中无法单击 MAUI 底部附近的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76828954/