Xamarin Forms iOS TitleBarTextЦвет не меняется - PullRequest
0 голосов
/ 28 сентября 2018

Чтобы изменить TitleBarTextColor, я много пробовал, и теперь мой код меняет цвет кнопки «Назад» и область в самой верхней части экрана, но заголовок!

в моей функции AppDelegate FinishedLaunching (это после Forms.Init () и до LoadApplication ()):

UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
{
    TextColor = UIColor.White
});

В моей ViewModel:

(App.Current.MainPage as NavigationPage).BarBackgroundColor = Color.FromHex("#990000");
(App.Current.MainPage as NavigationPage).BarTextColor = Color.White;

И вот как я перемещаюсь между страницами (не всестраницы):

await _navigationService.NavigateAsync(new Uri("http://wwww.x.com/NavigationPage/TabbedNavigationPage?selectedTab=XPage/Document", UriKind.Absolute));

Я даже пытаюсь вызвать код ViewModel после навигации по Призме, но он не работает ... Я новичок и не полностью понимаю Призму и / или формы Xamarin.

[EDIT] -> Я также пытался создать новый класс и унаследовать его от NavigationPage, установить BarTextColor в его конструкторе и использовать этот класс в навигации следующим образом: await _navigationService.NavigateAsync(new Uri("http://wwww.x.com/NEWCLASSCREATED/TabbedNavigationPage?selectedTab=XPage/Document", UriKind.Absolute)); НоКак вы, наверное, знаете, он все еще не работает.

Вот изображение;)

imageToSeeThatImNotLying

Спасибо за вашу поддержку!

1 Ответ

0 голосов
/ 04 октября 2018

Так что мне, наконец, удалось решить эту проблему ...

Мне нужно было создать пользовательский Content Page, потому что все остальные решения не работали.Поэтому я создал этот пользовательский рендерер только в своем проекте iOS:

[assembly: ExportRenderer(typeof(ContentPage), typeof(CustomContentPageRenderer))]
namespace TestProject.iOS.Bll.Utils.Renderers
{
    public class CustomContentPageRenderer : PageRenderer
    {
        public override void DidMoveToParentViewController(UIViewController parent)
        {
            base.WillMoveToParentViewController(parent);

            var titleView = new UITextView();
            var page = this.Element as ContentPage;

            try
            {
                if (!string.IsNullOrEmpty(page.Title))
                {
                    titleView.Text = page.Title;
                    titleView.TextColor = UIColor.White;
                    titleView.Font = UIFont.SystemFontOfSize(17, UIFontWeight.Regular);

                    var bgColor = page.BackgroundColor;
                    titleView.BackgroundColor = UIColor.FromRGBA((int)bgColor.R, (int)bgColor.G, (int)bgColor.B, 0);
                    parent.NavigationItem.TitleView = titleView;
                    parent.NavigationItem.TitleView.ContentMode = UIViewContentMode.ScaleAspectFit;
                }
            }
            catch (Exception e)
            {
            }
        }
    }
}

И я также удалил весь код, который я загружал ранее, в своем файле AppDelegate и в файле App.xaml.cs.Я оставил коды из ViewModels, потому что она меняла кнопку возврата на белый, и я удалил новый класс NagivationPage, который я создал ранее.

Я собираюсь объяснить, почему я сделал некоторые извещи, которые вы там видели:

Чтобы изменить заголовок, я создал UITextView() и установил его на NavigationItem.TitleView родительской страницы.Я установил titleView.Text = page.Title;, потому что у моей исходной страницы уже есть заголовок, поэтому я просто использую его повторно.И backgroundcolor Мне пришлось сделать все это, чтобы свойство backgroundcolor работало именно так, как я хотел.

И эта функция DidMoveToParentViewController была просто так, что она могла делать все это до NavigationAsync из Призмы.

...