#xamarin.forms #xamarin.ios
#xamarin.forms #xamarin.ios
Вопрос:
Я вижу странное поведение или, возможно, совершенно неправильный способ, которым я это делаю.
Получена страница с редактором внизу с кнопкой и listview с некоторыми сообщениями вверху.
Я использую 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>
Комментарии:
1. Вы загрузили демо-версию и прошли тест?
2. Можете ли вы предоставить свой образец, чтобы я мог протестировать его на своей стороне.
3. @LucasZhang-MSFT загрузил образец проекта github.com/developer9969/KeyboardSpike
4. Я проверю это.
5. @LucasZhang-MSFT очень благодарен!
Ответ №1:
Удаление scrollview устранило проблему