xamarin.forms - 编辑器和键盘重叠 (iOS) Xamarin forms 3.6 无法正常工作 (Visual=Material)
问题描述
我看到一个奇怪的行为,或者我这样做的方式可能完全错误。
有一个底部有一个编辑器的页面,一个按钮和一个顶部有一些消息的列表视图。
我在这个链接中使用keyboardRenderer
https://xamgirl.com/adjusting-elements-when-keyboard-shows-in-xamarin-forms/
问题
当我开始打字时,键盘出现,编辑器完全崩溃并开始打字,它让我打字,但它崩溃了(见图)有时也会崩溃,看不到任何东西。
你如何在 iOS 中使用带键盘的编辑器
折叠
使用的渲染器
[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
{
}
在我的页面中
<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>
解决方案
删除滚动视图对问题进行了排序
推荐阅读
- sql-server - 无效的对象名称错误但在模式中找到表?
- python - 按模式创建新组
- php - 使用 Docker 多阶段构建构建映像
- java - 带参数的 Firebase 动态链接
- c# - 端口布局视图模型到 Asp.Net Core
- r - 在ggplot2中重新调整线条粗细
- sql - 如何在 Apache Spark 的 Scala 中按数据集分组?
- reactjs - 测试接受参数的 onSubmit 道具
- java - JavaSpring中的SQL查询返回Null
- python - Why has pandas_datareader stopped retrieving data from IEX and Robinhood APIs