У меня проблема с Entry и ListView в Xamarin Forms. На Android он работает отлично, но на IOS, когда Focus установлен на Entry, ListView будет перемещен вверх, как на изображении:
Я пробовал использовать рендер:
Как сделать так, чтобы клавиатура не закрывала мой интерфейс, а не изменяла его размер?
но это не решило проблему, в моем случае, потому что мне нужно, чтобы ListView переместил не всю страницу! Я также обнаружил, что это известная проблема:
https://bugzilla.xamarin.com/show_bug.cgi?id=45336
https://thewikihow.com/video_1xwDRT_CnoM&feature=youtu.be
Есть предложения, как отключить движущиеся элементы при активации клавиатуры? И в этом случае мне нужно, чтобы фокус был установлен на true!
Код в XAML следующий:
<myControls:MyEntry Grid.Row = "0" Style = "{DynamicResource EntryControlStyle}"
x:Name = "CityEntry" AutomationId = "SearchCityEntry"
Placeholder = "{Binding TravelType, Converter = {StaticResource LanguageConverter}, Mode=OneWay}"
Text = "{Binding Path=SearchQuery}" />
<myControls:MyListControl
Grid.Row = "1"
SeparatorVisibility = "None"
HasUnevenRows = "True"
IsRefreshing = "{Binding IsRefreshing}"
RefreshCommand = "{Binding RefreshCommand}"
x:Name = "SelectCity"
ItemsSource = "{Binding Path=SearchResults}"
SelectedItem = "{Binding SelectedCity}">
<myControls:MyListControl.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView BackgroundColor = "White">
<Grid Margin = "10,10,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "0.4*" />
<ColumnDefinition Width = "4*" />
</Grid.ColumnDefinitions>
<StackLayout Grid.Column = "0" HorizontalOptions = "Start"
VerticalOptions = "Start">
<Image HorizontalOptions = "Start" VerticalOptions = "Start"
Source = "{Binding LocationSource,Converter = {StaticResource LocationSourceEnumToImageConverter} }" />
</StackLayout>
<Label Grid.Column = "1" AutomationId = "SearchCityList"
HorizontalOptions = "StartAndExpand"
Text = "{Binding Path=Name, Mode=TwoWay}"
Style = "{DynamicResource EntryControlStyle}" />
</Grid>
</ContentView>
</ViewCell>
</DataTemplate>
и код позади:
protected override void OnAppearing()
{
base.OnAppearing();
CityEntry.Focus();
}
protected override void OnDisappearing()
{
CityEntry.Unfocus();
base.OnDisappearing();
}
protected override bool OnBackButtonPressed()
{
CityEntry.Unfocus();
return base.OnBackButtonPressed();
}
@ Land Lu - MSFT Спасибо за вашу приверженность и помощь! Мне удалось решить эту проблему с переключением на Teleriks Rad List View вместо Xamarins List View. Я также не использовал последнюю версию Xamarin Forms из-за стандарта .net 1.6, который сейчас находится в приложении, поэтому я не могу подтвердить, что ошибка исправлена в новых версиях. Как только у меня появились Entry и ListView, как в приведенном выше коде, возникла проблема, как на изображении.
Попробуйте вызвать фокус перед base.OnAppearing ();





Я не могу воспроизвести вашу проблему с вашим кодом. И ваши видео в другом случае, вы можете попробовать записать свои собственные видео, чтобы показать свои проблемы. Кроме того, какую версию iOS вы используете.