Soru Geri gezinme çubuğu düğmesinin yazı tipini değiştir


Uygulamaları gezinme çubuğunun yazı tipini çok çılgın bir şey yapmadan ve düğmenin diğer tasarım özelliklerini kaybetmeden ayarlayabilirsiniz (yani ok tutmak istiyorum).

Şu anda bunu kullanıyorum viewDidAppear: Normal çubuk düğme öğelerinin yazı tipini ayarlamak için.

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

Ancak, bu durum arka planda hiçbir değişiklik yapmaz. UIViewController Bu kod (kök, akım vb.) uygulanır.


44
2018-05-14 05:06


Menşei


UIBarButton öğelerinin özel stilizasyonu: stackoverflow.com/a/28347428/469614 - Vexy


Cevaplar:


Metnin görünümünü değiştirmek için UIBarButtonItems hepsinde görünmek UINavigationBars, aşağıdakileri yapın 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];

GÜNCELLEME: iOS7 dostu sürümü

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];

Swift:

NOT: Bu, TÜM örnekleri değiştirir UIBarButtonItemsadece içinde bulunanlar değil UINavigationBar

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

swift3:     UIBarButtonItem.appearance () setTitleTextAttributes ([NSFontAttributeName: UIFont (name: "FontName-Regular", boyut: 14.0)!], İçin: .normal)


110
2018-05-14 08:40



Bu kesinlikle bunu yapmanın daha basit bir yoludur ve sadece geri düğmesine değil, gelecekteki tüm düğme öğelerine uygulanır. - zachjs
İyi çalışıyor. İOS 7'de kullanımdan kaldırılmış UITextAttributeTextColor vb. - LordParsley
Teşekkür ederim!. Benim için çalışıyor. - Raja
İOS 11'den ne haber? - Genevios
Çıkış yapmak: stackoverflow.com/a/28347428/469614 - Vexy


Tamamen bu işe yaramadı herkes için, IOS7 Root ViewController geri attı dahil, nasıl yaptım:

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];
}

Belki biri bunu kullanabilir.


6
2017-10-16 15:02



Yerel ayarlarla çalışmaz ve bir uygulamayı IAS'ye almak için gereken önceden yapılandırılmış erişilebilirlik ipuçlarını atar. Çok fazla iş yapmak istemediğiniz sürece, sistem tarafından sağlanan düğmeleri kullanmalısınız. - Barry


Yukarıda belirtilenlerin hızlı versiyonu ( orijinal cevap):

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

Daha fazla güzellik:
https://stackoverflow.com/a/28347428/469614


4
2018-02-05 15:13





Swift3'te:

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

Not: Navigasyon kontrolörü için bunu sadece bir kez yapmanız gerekir.


2
2018-01-26 15:09





Bunun yerine AppDelegate'inizde veya NavigationController'ın başlatıldığı yerlerde kullanın, iOS 5 ve üzeri sürümlerde kullanılabilir.

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]; 

1
2018-05-14 05:09



Bu yapılandırılmış backButton kullanılmadığından tam olarak bir cevap değildir. - Mike Pollard
@MikePollard sorusu, düğmeyi nasıl kullanacağını değil, yazı tipini değiştireceğini söyledi. nasıl kullanacağınızı bilmek istiyorsanız sormalısınız. - Ahmed Z.


Swift 3.0+

AppDelegate.swift

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

1
2018-01-30 20:07





Yeni kullanıyorsanız UISplitViewControllerDelegate iOS 8'de bölünmüş görünümler için, yukarıdaki yöntemler işe yaramaz çünkü yeni displayModeButtonItem biraz farklı çalışır.

Oluştururken yazı tipini ayarlamanız gerekir. displayModeButtonItem. Apple'ın şablonlarını takip ettiğinizi varsayalım, muhtemelen bu prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender böyle bir şey yaparsın:

// 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];

0
2017-11-09 06:49



Aslında daha fazla test ettikten sonra, bunun işe yaradığını sanmıyorum. Herhangi bir kişi yazı tipini nasıl değiştireceğine dair bir fikri varsa displayModeButtonItem bilmeme izin ver. - Nick