繁体   English   中英

.NET MAUI:隐藏在 iOS 键盘后面的条目

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM