2013-05-16 3 views
7

Я использовал фантастический [[UINavigationBar appearance] set..., чтобы установить широкоэкранные приложения для моего интерфейса. Тем не менее, я использую SKStoreProductViewController и хочу удалить весь мой стиль, чтобы он отображал пользовательский интерфейс Apple по умолчанию. Как ни странно, я ничего не делаю, я получаю мишень обычного пользовательского интерфейса и свой пользовательский интерфейс, который я действительно не понимаю. Я пытался противодействовать всем мои изменения пользовательского интерфейса, как это:Сбросить настройки внешнего вида для 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]; 

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

С уважением,
Mike

+1

Проверьте, существует ли 'navigationController', когда вы вызываете свои методы. – akashivskyy

+0

также не должны работать с разными объектами navigationBar – pmk

+0

@akashivskyy, Хорошо, тогда ребята, вот мои выводы: 'navigationController' не существует ... когда-либо. 'navigationItem' существует, но' navigationItem.leftBarButtonItem' не существует. Странно? – Mackey18

ответ

7

Хорошо тогда, я был вынужден прибегнуть к малоприятная обходного, чтобы решить эту проблему. Хотя я всегда знал, что это будет один из способов сделать это, я не хотел прибегать к нему, потому что он чувствует себя грязным.

Я подклассифицировал UINavigationController на что-то вроде CustomNavigationViewController и не вносил никаких изменений. Иными словами, это UINavigationController, но с другим именем. Затем я использовал:

[[UINavigationBar appearanceWhenContainedIn:[CustomNavigationViewController class], nil] set.... , чтобы установить внешний вид, применяя его только к тем навигационным контроллерам, которые относятся к моему пользовательскому классу. SKStoreProductViewController, очевидно, не относится к моему пользовательскому классу и поэтому не получает стиль для него.

Это, по-моему, неприятное, нечистое решение, но оно работает.

Mike.

+0

Это, к сожалению, сейчас единственное решение ... – akashivskyy

0

Вы можете быть весьма специфичны о стилизации этих элементов с помощью UIAppearance прокси. У этого метода есть метод, который применяет стиль только тогда, когда он содержится в определенном классе контроллера вида.

Там хороший учебник here:

+0

Спасибо за ответ. Боюсь, что это не сработало. Это было то, что я пробовал. Причина, по которой это не работает, состоит в том, что вещи, которые мы пытаемся изменить в магазине VC, считаются находящимися в «navBar», поэтому «внешний видWhenContainedIn'' UINavigationBar» и т. Д. Не отличает его от всего остального в приложении , Кроме того: 'Controller.navigatonController.navgiationBar', по-видимому, не существует, поэтому мы не можем редактировать VC там. – Mackey18

Смежные вопросы