Xamarin.forms 编辑器和键盘重叠(iOS)Xamarin forms 3.6无法正常工作(视觉=材质)
我看到一个奇怪的行为,或者可能是完全错误的,他们这样做 有一个底部有一个编辑器的页面,有一个按钮和一个顶部有一些消息的列表视图 我在这个链接中使用键盘渲染器 问题 当我开始打字时,键盘出现,编辑器完全折叠并开始打字,它允许我打字,但它会折叠(见图) 有时也会崩溃,什么也看不见 如何在iOS中使用带键盘的编辑器 崩溃 没有崩溃 使用的渲染器Xamarin.forms 编辑器和键盘重叠(iOS)Xamarin forms 3.6无法正常工作(视觉=材质),xamarin.forms,xamarin.ios,Xamarin.forms,Xamarin.ios,我看到一个奇怪的行为,或者可能是完全错误的,他们这样做 有一个底部有一个编辑器的页面,有一个按钮和一个顶部有一些消息的列表视图 我在这个链接中使用键盘渲染器 问题 当我开始打字时,键盘出现,编辑器完全折叠并开始打字,它允许我打字,但它会折叠(见图) 有时也会崩溃,什么也看不见 如何在iOS中使用带键盘的编辑器 崩溃 没有崩溃 使用的渲染器 [assembly: ExportRenderer(typeof(KeyboardView), typeof(KeyboardViewRenderer
[assembly: ExportRenderer(typeof(KeyboardView),
typeof(KeyboardViewRenderer))]
namespace KeyboardSample.iOS.Renderers
{
public class KeyboardViewRenderer : ViewRenderer
{
NSObject keyboardShowObserver;
NSObject keyboardHideObserver;
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
RegisterForKeyboardNotifications();
}
if (e.OldElement != null)
{
UnregisterForKeyboardNotifications();
}
}
private void RegisterForKeyboardNotifications()
{
if (keyboardShowObserver == null)
keyboardShowObserver = UIKeyboard.Notifications.ObserveWillShow(OnKeyboardShow);
if (keyboardHideObserver == null)
keyboardHideObserver = UIKeyboard.Notifications.ObserveWillHide(OnKeyboardHide);
}
private void OnKeyboardShow(object sender, UIKeyboardEventArgs args)
{
NSValue result = (NSValue)args.Notification.UserInfo.ObjectForKey(new NSString(UIKeyboard.FrameEndUserInfoKey));
CGSize keyboardSize = result.RectangleFValue.Size;
if (Element != null)
{
Element.Margin = new Thickness(0, 0, 0, keyboardSize.Height); //push the entry up to keyboard height when keyboard is activated
}
}
private void OnKeyboardHide(object sender, UIKeyboardEventArgs args)
{
if (Element != null)
{
Element.Margin = new Thickness(0); //set the margins to zero when keyboard is dismissed
}
}
private void UnregisterForKeyboardNotifications()
{
if (keyboardShowObserver != null)
{
keyboardShowObserver.Dispose();
keyboardShowObserver = null;
}
if (keyboardHideObserver != null)
{
keyboardHideObserver.Dispose();
keyboardHideObserver = null;
}
}
}
public class KeyboardView: Grid
{
}
[程序集:ExportRenderer(typeof(KeyboardView)),
类型(KeyboardViewRenderer))]
命名空间KeyboardSample.iOS.Renderers
{
公共类KeyboardViewRenderer:ViewRenderer
{
NSObject键盘显示器;
NSObject键盘HideObserver;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(例如NewElement!=null)
{
RegisterWorkeryBoardNotifications();
}
if(e.OldElement!=null)
{
取消注册ForkeyBoardNotifications();
}
}
私有无效注册表WorkeryBoardNotifications()
{
如果(keyboardShowObserver==null)
keyboardShowObserver=UIKeyboard.Notifications.ObserveWillShow(OnKeyboardShow);
if(keyboardHideObserver==null)
keyboardHideObserver=UIKeyboard.Notifications.ObserveWillHide(OnKeyboardHide);
}
私有void OnKeyboardShow(对象发送方,UIKeyboardEventArgs args args)
{
NSValue结果=(NSValue)args.Notification.UserInfo.ObjectForKey(新的NSString(UIKeyboard.FrameEndUserInfoKey));
CGSize keyboardSize=result.RectangleFValue.Size;
if(元素!=null)
{
Element.Margin=新的厚度(0,0,0,keyboardSize.Height);//当键盘被激活时,将条目推高至键盘高度
}
}
私有void OnKeyboardHide(对象发送方,UIKeyboardEventArgs args args)
{
if(元素!=null)
{
Element.Margin=新厚度(0);//当键盘关闭时,将边距设置为零
}
}
私有无效取消注册ForkeyBoardNotifications()
{
if(keyboardShowObserver!=null)
{
keyboardShowObserver.Dispose();
keyboardShowObserver=null;
}
if(keyboardHideObserver!=null)
{
keyboardHideObserver.Dispose();
keyboardHideObserver=null;
}
}
}
公共类键盘视图:网格
{
}
在我的页面中
<controls:KeyboardView Padding="0,60,0,0"
VerticalOptions="FillAndExpand">
<Grid RowSpacing="0" ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView Grid.Row="0">
<!--TODO -->
</ListView>
<Grid Grid.Row="1" RowSpacing="0" ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackLayout Orientation="Horizontal">
<ScrollView HorizontalOptions="FillAndExpand" >
<Editor
AutoSize="TextChanges"
Text="{Binding MyText, Mode=TwoWay}"
Margin="10"
TextColor="Black"
Keyboard="Chat"
BackgroundColor="Gainsboro"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
PlaceholderColor="LightGray"
Placeholder="Type your message here" />
</ScrollView>
<StackLayout HorizontalOptions="End" VerticalOptions="End">
<Button Text="Send" Command="{Binding TODOCommand}" Margin="0,10,10,10"/>
</StackLayout>
</StackLayout>
</Grid>
</Grid>
</controls:KeyboardView>
删除scrollview解决了问题你下载了演示并进行了测试吗?你能提供你的样本让我在我这边进行测试吗。@LucasZhang MSFT上传了一个样本项目,我会检查它。@LucasZhang MSFT非常感谢!