【问题标题】:UIViewController inserted into UINavigationController stack loses UIAppearance settings插入 UINavigationController 堆栈的 UIViewController 丢失 UIAppearance 设置
【发布时间】:2013-03-19 13:34:19
【问题描述】:

我为导航栏设置了 UIAppearance。

[[UINavigationBar appearance] setTitleTextAttributes: [self navigationBarTitleTextAttributes]];



-(NSDictionary *)navigationBarTitleTextAttributes
{
    // UINavigationBar title
    NSNumber *navBarTitleShadowOpacity = [self.personalityDictionary objectForKey:kNavBarTitleShadowOpacity];
    UIColor *navBarTitleColor = [UIColor colorWithHexString: [self.personalityDictionary objectForKey:kNavBarTitleColor] alpha:1.0f];
    UIColor *navBarTitleShadowColor = [UIColor colorWithHexString:[self.personalityDictionary objectForKey:kNavBarTitleShadowColor] alpha: [navBarTitleShadowOpacity floatValue]];

    return [NSDictionary dictionaryWithObjectsAndKeys:
     navBarTitleColor, UITextAttributeTextColor,
     navBarTitleShadowColor, UITextAttributeTextShadowColor,
     [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
     nil];
}

一切正常。在我的应用程序中,我需要在堆栈中插入一个视图控制器并弹出它。

ChatsViewController* chatsViewController = [[ChatsViewController alloc] init];

NSMutableArray *mutableViewControllers = [self.navigationController.viewControllers mutableCopy];

[mutableViewControllers insertObject: chatsViewController atIndex: [mutableViewControllers count] - 1];

[self.navigationController setViewControllers: mutableViewControllers animated: NO];

[self.navigationController popToViewController: chatsViewController animated: YES];

此时标题栏失去外观设置,恢复为默认白色。任何推入堆栈的新视图控制器也会失去其外观。

有什么问题?

【问题讨论】:

    标签: objective-c uinavigationcontroller uiappearance


    【解决方案1】:

    如果你在 appDelegate 类中自定义这个,那么这个问题永远不会出现。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
      {
       // Code.........
    
       [[UINavigationBar appearance] setTitleTextAttributes: [self navigationBarTitleTextAttributes]]
      }
    
    -(NSDictionary *)navigationBarTitleTextAttributes
     {
    
    // NSNumber *navBarTitleShadowOpacity = [self.personalityDictionary objectForKey:kNavBarTitleShadowOpacity];
     UIColor *navBarTitleColor = [UIColor redColor];//: [self.personalityDictionary objectForKey:kNavBarTitleColor] alpha:1.0f];
     UIColor *navBarTitleShadowColor = [UIColor  greenColor];//colorWithHexString:[self.personalityDictionary objectForKey:kNavBarTitleShadowColor] alpha: [navBarTitleShadowOpacity floatValue]];
    
    return [NSDictionary dictionaryWithObjectsAndKeys:
            navBarTitleColor, UITextAttributeTextColor,
            navBarTitleShadowColor, UITextAttributeTextShadowColor,
            [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
            nil];
      } 
    

    希望对你有帮助。

    【讨论】:

    • 这就是我正在做的事情 - 我的 AppearanceManager 类在我的导航控制器设置之前运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多