Размеры безопасной области Xamarin Forms iOS изменяются при загрузке?

#xamarin.forms #xamarin.ios #xamarin.shell

#xamarin.forms #xamarin.ios #xamarin.shell

Вопрос:

Немного странный. Я создал приложение в Xamarin Forms (оболочке), и все отлично работает на Android. Когда я перехожу на новую страницу в ios (физическое устройство iphone 11), экран, кажется, раскрывается и изменяет размер. Я думаю, это связано со свойством безопасной области, используемым в представлениях, которое происходит немного слишком медленно, поскольку кажется, что оно находится в безопасных областях, а затем изменяется, чтобы быть в безопасной зоне.

Не влияет на Android.

Я не могу создать заново в новом проекте, но мой текущий проект требует значительных временных затрат, и я не хочу начинать все сначала… Я не могу повторно вписаться в свой существующий проект, проблема сохраняется.

Ниже приведен пример кода, но странный момент заключается в том, что он, похоже, работает в новом проекте, поэтому я ищу рекомендации о том, что еще можно установить где-нибудь для отладки этой проблемы. Есть мысли? Могу предоставить дополнительные примеры кода по мере необходимости, просто дайте мне знать.

Я пробовал обновлять и понижать рейтинг пакетов и т.д. Никакого эффекта.

Упаковка

Я перемещаюсь с помощью

    private async Task ExecuteAddPageCommand()
        {
            await PushAsync(new AddPagePage());
        }
  

где PushAsync находится в моей baseviewmodel

     public async Task<bool> PushAsync(Page page)
    {
        try
        {
            await Shell.Current.Navigation.PushAsync(page);
            return true;
        }
        catch
        {
            await Shell.Current.GoToAsync(Utilities.Routes.ErrorModalPage);
            return false;
        }
    }
  

И страницы имеют стандартные свойства (пример)

 <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
             ios:Page.UseSafeArea="true"
             Visual="Material"
             x:Class="namespace:Thing.Views.AddPage"
             xmlns:converter="clr-namespace:Thing.Converters"
             xmlns:controls="clr-namespace:Thing.Controls"
             xmlns:utilities="clr-namespace:Thing.Utilities"
             >
    <ContentPage.Resources>
    <ResourceDictionary>
      <converter:IntToEnumConverter x:Key="IntToEnum"/>
      <converter:InverseBoolConverter x:Key="InverseBool"/>

    </ResourceDictionary>
  </ContentPage.Resources>
    <ContentPage.Content>
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="2*"></RowDefinition>
          <RowDefinition Height="5*"></RowDefinition>
                <RowDefinition Height="1*"></RowDefinition>

           </Grid.RowDefinitions>

            <controls:PageHeader Grid.Row="0" ShowBackButton="true"
                           HeaderTitle="New Thing"
                HeaderImage="{x:Static utilities:Icons.AddMenuIcon}" 
                                 BackCommand="{Binding NavigateBackCommand}"/>

        <StackLayout Grid.Row="1">
          <Label Text="What do you want to call this?" Style="{StaticResource FormLabel}"/>
          <Entry Text="{Binding Name.Value}" Placeholder="E.g. My shiny thing"/> 
        </StackLayout>
        <StackLayout Grid.Row="2" Orientation="Horizontal">
          <Button HorizontalOptions="FillAndExpand" Text="Cancel" Command="{Binding NavigateBackCommand}"></Button>
          <Button HorizontalOptions="FillAndExpand" Text="Save" Command="{Binding SaveCommand}"></Button>
        </StackLayout>
      </Grid>
    </ContentPage.Content>
</ContentPage>
  

Комментарии:

1. Вызываем строку On<iOS>().SetUseSafeArea(true); .

2. Привет, Лукас, спасибо за твое сообщение. Я установил это в xaml каждой требуемой страницы (которая приведена в примере). Отличается ли этот код на c #? Или точно такой же способ настройки свойства, но в коде позади?

3. Они имеют тот же эффект.

4. ОК. Как вы можете видеть в коде, свойство устанавливается в XAML, но я испытываю этот странный всплывающий эффект при загрузке страницы. Что еще может повлиять на это? Существует ли ограничение версии, например 4.5? и т. Д

5. Вы могли бы обновить версию XF до последней и проверить еще раз.

Ответ №1:

У меня была точно такая же проблема, и обновление до последней версии (4.8.1269) не помогло. Кажется, эта проблема была введена в 4.7.1260. Я понизил рейтинг до 4.7.1239, и все снова хорошо.

Комментарии:

1. Я понизил рейтинг до 4.7.1239, но все еще происходит. Мне интересно, является ли это обновлением visual Studio и как-то связано с тем, как оно создается?

2. Похоже, они только что выпустили обновление до версии 4.7 (4.7.1351), которое устраняет эту проблему. Эта версия работает в моем проекте, я надеюсь, что она будет работать и в вашем. Вот примечания к выпуску. github.com/xamarin/Xamarin . Forms / releases /tag/release-4.7.0-sr6

3. я все еще не уверен, в чем причина этой проблемы, поскольку проблема возникла у моего локального клиента, но я встроил ее в Azure DevOps, и она отлично работала! Так что, я думаю, это что-то дополнительное к пакету xamarin. Эта версия 4.7.0 sr6 звучит точно так же, как проблема, так что, надеюсь, она также скоро будет решена локально!