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

c3frrgcw  于 2023-02-06  发布在  .NET
关注(0)|答案(1)|浏览(143)

我正在尝试安装并运行一个. NET Maui应用程序,到目前为止它运行得相当不错-但有一个主要问题:我无法修复Entry/Editor控件停留在键盘上方且不重叠的问题。
我知道有一个未解决的问题,它在积压工作中,但应用程序似乎无法使用,直到这个问题得到解决。
[GitHub] dotnet/毛伊岛第4792期,
[GitHub]. net/毛伊岛问题10662(#1)和
[GitHub]. net/毛伊岛问题10662(#2)
但是当我注册为一个处理程序时,我不能让它们工作。#1不做任何事情,#2在加载任何视图时崩溃。
StackOverflow上也有一个解决方案(Question 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模板应用程序。
这会导致在启用键盘时无法在ScrollView中向上推Entry(红色):

我怎样才能实现--我猜通常是默认的特性--在考虑键盘高度的同时,控件被推高到仍然可见(例如,有/没有自动完成或表情符号键盘)?
先谢了!

tjrkku2a

tjrkku2a1#

为了解决这个问题,您可以通过UIKeyboard.FrameEndUserInfoKey获得键盘的框架,并计算需要更改的高度。

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);
    }
}

希望对你有用。

相关问题