Удаление вкладки со вкладки оставляет пустое пространство. Как это убрать? - PullRequest
1 голос
/ 21 мая 2019

Я хочу удалить Tabbar из TabbedPage.Я получил это работает, но он оставляет пустое пространство или высота страницы не обновляется после скрытия Tabbar.

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

Я пробовал с этой ссылки.Но это не работает.

Также попытался выполнить следующие действия:

private void Element_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            try
            {
                TabBar.Hidden = true;

                //TabBar.Bounds = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
                //                                                     View.Subviews[0].Frame.Width, 0);

                if (TabBar.Hidden)
                {
                    // page
                    View.Subviews[0].Frame = new CoreGraphics.CGRect(0, 0, View.Subviews[1].Frame.Width, NativeView.Frame.Height);

                    // Tabbar
                    View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
                                                                     View.Subviews[0].Frame.Width, 0);
                }
                else
                {
                    View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
                                                                     View.Subviews[1].Frame.Width, 49);
                    View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
                                                                     View.Subviews[0].Frame.Width, View.Subviews[0].Frame.Height - 49);
                }

                //if (TabBar.Hidden)
                //    View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 0);
                //else
                //    View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 49);
            }
            catch (Exception ex)
            {
                //TraceLog("Element_PropertyChanged" + ex.Message);
            }
}

РЕДАКТИРОВАТЬ

Я открываю вкладку на странице просмотра списка, щелкнув.Я разрешаю добавлять несколько вкладок динамически.Также я создал пользовательскую панель вкладок с помощью ContentView, которую я обновляю при добавлении или удалении страниц из TabbedPage.

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

Вот код в ListView_ItemTapped (точно не опубликовано, как это на самом деле, но вы можете понять:))

MultiTab ObjMultiTab = new MultiTab(); // Initialize tabbed page

// Get data from server 
ObjMultiTab.Data = ObjData; 
int Id = Convert.ToInt32(ObjData.id); 

if (ActiveList.ContainsKey(Id)) // Dictionary that contains info about index and pageid that are already open 
{ 
   TabId = ActiveList[ObjData.id]; 
   CurrentPage = Children[TabId]; // If user taps on already opend page 
} 
else 
{ 
   Count += 1; ActiveList.Add(Id, Count); 
   Children.Add(new SecondTabbedPage(TableData)); // Or add new child 
   CurrentPage = Children[Count]; 
} 

await Application.Current.MainPage.Navigation.PushModalAsync(ObjMultiTab); 

Есть ли способ также удалить пробел в первый раз?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Существует решение, которое не требует рендеринга и работает как на Android, так и на iOS.

Оберните TabbedPage в NavigationPage, чтобы структура вашего приложения стала

  • NavigationPage (root)
    • TappedPage
      • NavigationPage
        • ContentPage (с панелью вкладок)
    • ContentPage (без панели вкладок)

В TabbedPage вы должны скрыть панель навигации «корневой» NavigationPage, в противном случае у вас есть 2 панели навигации.

<TabbedPage
    ...
    HasNavigationBar="False"> 

Если вы нажимаете на страницу, используя «root» NavigationPage, панель вкладок скрыта, и внизу нет пустого пространства.

--- Редактировать ---

См. Мой пример по адресу: https://github.com/Jfcobuss/HideTabbarExample/tree/master/HideTabbarExample

Недостатком этого решения является

  • Это немного хакерский обходной путь

  • Заголовок рядом с кнопкой «Назад» - это заголовок TabbedPage, а не текущая вкладка

  • Анимация на следующей странице не такая плавная, какпо умолчанию

0 голосов
/ 23 мая 2019

Добавление следующей функции к рендереру убрало пробел из TabbedPage.

public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();

    TabBar.Hidden = true;

    var page = View.Subviews[0];
    var tabbar = View.Subviews[1];

    tabbar.Bounds = CGRect.Empty;
    page.Bounds = UIScreen.MainScreen.Bounds;
}
...