2013-05-16 16 views
7

Używam fantastycznej wersji [[UINavigationBar appearance] set... do ustawienia wyglądu aplikacji dla mojego interfejsu użytkownika. Jednak używam modelu SKStoreProductViewController i chcę usunąć całą moją stylizację, aby wyświetlała domyślny interfejs Apple. Dziwne, bez robienia czegokolwiek, dostaję misz-mash zwykłego interfejsu użytkownika i mojego niestandardowego interfejsu użytkownika, którego tak naprawdę nie rozumiem. Próbowałem przeciwdziałaniu wszystkie moje zmiany UI tak:Przywróć domyślne ustawienia wyglądu dla UINavigationBar

[storeController.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 
    [storeController.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                  nil, UITextAttributeTextColor, 
                  nil, UITextAttributeTextShadowColor, 
                  nil]]; 

    [storeController.navigationController.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; 
    [storeController.navigationController.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; 

Ale to nie wydaje się działać, co czyni żadnej różnicy w ogóle. Jak mogę przywrócić domyślne ustawienia interfejsu użytkownika?

Pozdrawiam,
Mike

+1

Sprawdź, czy 'navigationController' już istnieje, gdy wywołasz swoje metody. – akashivskyy

+0

również upewnij się, że nie pracujesz na różnych obiektach nawigacyjnychBar – pmk

+0

@akashivskyy, Ok, więc ludzie, oto moje wnioski: 'navigationController' nie istnieje ... nigdy. 'navigationItem' istnieje, ale' navigationItem.leftBarButtonItem' nie istnieje. Dziwne prawda? – Mackey18

Odpowiedz

7

Ok wtedy, miałem do uciekania się do bolesnego trochę obejście, aby rozwiązać ten problem. Chociaż zawsze wiedziałem, że to jeden ze sposobów, nie chciałem się do tego odwoływać, ponieważ czuje się niechlujnie.

Podklasowałem UINavigationController na coś takiego jak CustomNavigationViewController i nie wprowadziłem absolutnie żadnych zmian. Innymi słowy, jest to IS UINavigationController, ale o innej nazwie. Następnie użyłem:

[[UINavigationBar appearanceWhenContainedIn:[CustomNavigationViewController class], nil] set.... , aby ustawić wygląd, stosując go tylko do tych kontrolerów NavigationController, które należą do mojej niestandardowej klasy. SKStoreProductViewController oczywiście nie należy do mojej niestandardowej klasy i dlatego nie nadaje się do tego.

To jest paskudna, nieczysta poprawka, moim zdaniem, ale działa.

Mike.

+0

To niestety wydaje się być jedynym rozwiązaniem w tej chwili ... – akashivskyy

0

Możesz być dość specyficzny temat stylizacji tych elementów za pomocą proxy UIAppearance. Ta metoda stosuje stylowanie tylko wtedy, gdy jest zawarte w określonej klasie kontrolera widoku.

Jest to dobry poradnik here:

+0

Dzięki za odpowiedź. Obawiam się, że to nie zadziałało. To było jednak coś, co próbowałem. Powodem, dla którego to nie działa, jest to, że rzeczy, które próbujemy zmienić w sklepie VC, są uważane za "navBar", dlatego "pojawienie się" UniqueBladeIn "" UINavigationBar "itp. Nie odróżnia go od wszystkiego innego w aplikacji . Co więcej: "Controller.navigatonController.navgiationBar", najwyraźniej nie istnieje, więc nie możemy edytować VC tam. – Mackey18

Powiązane problemy