У меня есть страница входа с 3 элементами управления вводом под большим логотипом изображения и элементом управления «Кнопка» в нижней части страницы, когда я нажимаю на верхний элемент управления вводом, чтобы сфокусировать ввод, чтобы начать печатать, появляется клавиатура и закрывает Элементы управления входом ниже и кнопка «Войти», которая не является лучшим пользовательским интерфейсом.
Пользователь может прокручивать вверх только вручную на Xamarin.Forms.iOS, но с помощью того же кода, ScrollToAsync, на Android. (EntryControl, ScrollToPosition.Start, правда);"
В Android кнопка в нижней части страницы также перемещается вверх с помощью символа * в определении строки сетки для пустого места посередине.
Похоже, Xamarin.Forms.iOS ведет себя совершенно иначе, чем Xamarin.Forms.Android при рендеринге. Я видел, что у ScrollToAsync есть некоторые проблемы с iOS при загрузке страницы из-за того, что ScrollView не существует до полной загрузки страницы. Но это действие происходит на странице, которая уже полностью отрендерилась. Что я делаю не так?
Я пробовал задержку, как указано в этом SO, но это не помогает. ScrollToAsync не работает в Xamarin.Forms
XAML
<Grid>
<ScrollView VerticalOptions="FillAndExpand"
BackgroundColor="White"
x:Name="ScrollViewContainer"
>
<Grid Margin="15, 0, 15, 10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /><!--Logo-->
<RowDefinition Height="Auto" /><!--Entry1-->
<RowDefinition Height="Auto" /><!--Entry2-->
<RowDefinition Height="Auto" /><!--Entry3-->
<RowDefinition Height="*" />
<RowDefinition Height="Auto" /><!--Button-->
<RowDefinition Height="20" /><!--Empty padding-->
</Grid.RowDefinitions>
<Image Grid.Row="0"
Aspect="AspectFit"
Source="CompanyLogo"
HorizontalOptions="Start"
HeightRequest="300"
VerticalOptions="Start"
Margin="10, 20, 20, 0"
/>
<Entry Grid.Row="1"
x:Name="BranchName"
Placeholder="BranchName"
Focused="BranchName_Focused"
/>
<Entry Grid.Row="2"
x:Name="Username"
Placeholder="e.g. Batman "
Focused="Username_Focused"
/>
<Entry Grid.Row="3"
x:Name="Password"
Placeholder="Enter your password"
Focused="Password_Focused"
IsPassword="True"
/>
<Button Grid.Row="5"
x:Name="LoginButton"
Text="Log in"
/>
</Grid>
</ScrollView>
</Grid>
Код позади
private async void BranchName_Focused(object sender, FocusEventArgs e)
{
await ScrollViewContainer.ScrollToAsync(BranchName, ScrollToPosition.Start, true);
}