[英].NET MAUI: entry hidden behind keyboard on iOS
我正在尝试启动并运行 .NET Maui 应用程序,到目前为止它运行良好 - 有一个主要问题:我无法修复Entry
/ Editor
控件停留在键盘上方并且没有重叠的问题。
我知道有一个悬而未决的问题,它在积压中,但在解决此问题之前,该应用程序似乎无法使用。 有一些解决方法,例如
[GitHub] do.net/maui 问题 4792 ,
[GitHub] do.net/maui 问题 10662 (#1)和
[GitHub] do.net/maui 问题 10662 (#2)
但是在注册为处理程序时我无法让它们工作。 #1 不执行任何操作,#2 在加载任何视图时崩溃。
StackOverflow 上也有一个解决方案( 问题 72536074 )——不幸的是,此方法忽略了键盘高度。
要重现该问题,最简单的代码示例是具有以下内容的任何 ContentPage:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="EntryIssueMaui.MainPage">
<ScrollView>
<Entry VerticalOptions="End" BackgroundColor="LightCoral" />
</ScrollView>
</ContentPage>
基于默认的 Maui 模板应用程序。
当启用键盘时,它会导致Entry
(红色)不会在ScrollView
中向上推:
我如何实现 - 我猜通常是默认功能 - 在考虑键盘高度的同时将控件向上推以仍然可见(例如,有/没有自动完成或表情符号键盘)?
提前致谢!
为了解决这个问题,您可以通过UIKeyboard.FrameEndUserInfoKey
获取键盘的 frame并计算需要更改的高度。
NSValue result = (NSValue)args.Notification.UserInfo.ObjectForKey(new NSString(UIKeyboard.FrameEndUserInfoKey));
CGSize keyboardSize = result.RectangleFValue.Size;
private void Entry_Focused(object sender, FocusEventArgs e)
{
if (DeviceInfo.Current.Platform == DevicePlatform.iOS)
{
NFloat bottom;
try
{
UIWindow window = UIApplication.SharedApplication.Delegate.GetWindow();
bottom = window.SafeAreaInsets.Bottom;
}
catch
{
bottom = 0;
}
var heightChange = (keyboardSize.Height - bottom);
layout.TranslateTo(0, originalTranslationY.Value - heightChange, 50);
}
}
private void Entry_Unfocused(object sender, FocusEventArgs e)
{
if (DeviceInfo.Current.Platform == DevicePlatform.iOS)
{
layout.TranslateTo(0, 0, 50);
}
}
希望对你有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.