首页 文章

更改后导航栏按钮的字体

提问于
浏览
46

我希望能够设置我的应用程序导航栏后退按钮的字体,而不会做任何太疯狂的事情,并且不会丢失按钮的任何其他设计特征(即我想保留箭头) .

现在我在 viewDidAppear: 中使用它来设置普通条形按钮项的字体 .

for (NSObject *view in self.navigationController.navigationBar.subviews) {
    if ([view isKindOfClass:[UIButton class]]) {
        [((UIButton*)view).titleLabel setFont:[UIFont 
                                 fontWithName:@"Gill Sans" 
                                         size:14.0]];
    }
}

但是,这不会对后退按钮进行任何更改,无论该代码应用于哪个 UIViewController (根,当前等) .

7 回答

  • 0

    上面提到的Swift版本(摘自original answer):

    let customFont = UIFont(name: "customFontName", size: 17.0)!
    UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], forState: .normal)
    

    更多好东西:
    https://stackoverflow.com/a/28347428/469614

  • 112

    在Swift3中:

    let font = UIFont(name: "Verdana", size: 10.0)
    
    // Back button
    UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font!], for: UIControlState.normal)  
    
    // Title in the navigation item
    let fontAttributes = [NSFontAttributeName: font]
    self.navigationController?.navigationBar.titleTextAttributes = fontAttributes
    

    注意:您只需为导航控制器执行一次此操作 .

  • 2

    Swift 3.0+

    AppDelegate.swift

    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "myFont", size: 17.0)!], for: .normal)
    
  • 1

    要更改所有 UINavigationBars 中出现的所有 UIBarButtonItems 中文本的外观,请在 application:didFinishLaunchingWithOptions: 中执行以下操作

    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:
        @{UITextAttributeTextColor:[UIColor blackColor],
         UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
         UITextAttributeTextShadowColor:[UIColor whiteColor],
         UITextAttributeFont:[UIFont boldSystemFontOfSize:12.0]
        }
         forState:UIControlStateNormal];
    

    更新:iOS7友好版

    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowOffset = CGSizeMake(0.0, 1.0);
    shadow.shadowColor = [UIColor whiteColor];
    
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
     setTitleTextAttributes:
     @{NSForegroundColorAttributeName:[UIColor blackColor],
       NSShadowAttributeName:shadow,
       NSFontAttributeName:[UIFont boldSystemFontOfSize:12.0]
       }
     forState:UIControlStateNormal];
    

    迅速:

    注意:这会更改 UIBarButtonItem 的所有实例,而不仅仅是 UINavigationBar 中包含的实例

    UIBarButtonItem.appearance()
                   .setTitleTextAttributes([NSFontAttributeName : ExamplesDefaults.fontWithSize(22)], 
                                           forState: UIControlState.Normal)
    

    Swift3:

    UIBarButtonItem.appearance()
         .setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FontName-Regular", size: 14.0)!], 
                                 for: .normal)
    
  • 2

    对于那些没有完全解决这个问题的人来说,我就是这样做的,包括弹回到IOS7中的Root ViewController:

    UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:self action:@selector(popToRoot:)];
    backBtn.title = @"Back";
    [backBtn setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                     [UIFont fontWithName:@"Chalkduster" size:15], NSFontAttributeName,
                                     [UIColor yellowColor], NSForegroundColorAttributeName,
                                     nil]
                           forState:UIControlStateNormal];
    
    self.navigationItem.leftBarButtonItem=backBtn;
    

    popToRoot ViewController:

    - (IBAction)popToRoot:(UIBarButtonItem*)sender {
    [self.navigationController popToRootViewControllerAnimated:YES];
    }
    

    也许有人可能会使用这个 .

  • 6

    请在AppDelegate或初始化NavigationController的地方使用此方法,该方法在iOS 5及更高版本中可用

    UIBarButtonItem *backbutton =  [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:nil action:nil];  
    [backbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor blackColor],UITextAttributeTextColor,[UIFont fontWithName:TEXTFONT size:16.0f],UITextAttributeFont,
                                                       nil] forState:UIControlStateNormal];
    
  • 4

    如果您在iOS 8中使用新的UISplitViewControllerDelegate进行拆分视图,则上述方法将无效,因为新 displayModeButtonItem 的工作方式略有不同 .

    您需要在创建 displayModeButtonItem 时设置字体 . 假设你是're following Apple'的模板,这可能是在 prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender ,你会做这样的事情:

    // From Apple's Template:
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
    [controller setDetailItem:object];
    controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
    controller.navigationItem.leftItemsSupplementBackButton = YES;
    // New Line to set the font:
    [controller.navigationItem.leftBarButtonItem setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];
    

相关问题