Birden fazla Görüntü Denetleyicim var ve hepsinin yazı tipi rengini kırmızı olarak ayarlamak istiyorum.
[[UINavigationBar appearance] setFont:[UIFont boldSystemFontOfSize:12.0]];
tanınmayan bir seçici hatası veriyor.
Bunu nasıl düzeltebilirim?
Birden fazla Görüntü Denetleyicim var ve hepsinin yazı tipi rengini kırmızı olarak ayarlamak istiyorum.
[[UINavigationBar appearance] setFont:[UIFont boldSystemFontOfSize:12.0]];
tanınmayan bir seçici hatası veriyor.
Bunu nasıl düzeltebilirim?
Yanıtlar:
Ray Wenderlich'ten:
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
// Customize the title text for *all* UINavigationBars
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Arial-Bold" size:0.0],
UITextAttributeFont,
nil]];
Veya nesne değişmez stilini tercih ederseniz:
[[UINavigationBar appearance] setTitleTextAttributes:@{
UITextAttributeTextColor: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
UITextAttributeTextShadowColor: [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
UITextAttributeFont: [UIFont fontWithName:@"Arial-Bold" size:0.0],
}];
İOS 7 ve sonrası için düzenleyin
UITextAttributes, iOS 7 olarak kullanımdan kaldırıldı, aşağıdakileri kullanabilirsiniz:
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithWhite:.0f alpha:1.f];
shadow.shadowOffset = CGSizeMake(0, -1);
[[UINavigationBar appearance] setTitleTextAttributes:@{
NSForegroundColorAttributeName: [UIColor whiteColor],
NSShadowAttributeName: shadow,
NSFontAttributeName: [UIFont fontWithName:@"Arial-Bold" size:15.0f]
}];
if ([navBarInstance respondsToSelector:@selector(appearance)])önce yapmaya değer çünkü 5'in altındaki iOS sürümlerini çökertecek.
UITextAttributeTextColor, NSForegroundColorAttributeNameiOS 7'nin lehine kullanımdan kaldırıldı
İOS 6'dan büyük veya ona eşit dağıtım hedefleri için, NSShadowbunun yerine şunu kullanmalısınız :
NSShadow * shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor lightGrayColor];
shadow.shadowOffset = CGSizeMake(0, -2);
NSDictionary * navBarTitleTextAttributes =
@{ NSForegroundColorAttributeName : [UIColor redColor],
NSShadowAttributeName : shadow,
NSFontAttributeName : [UIFont systemFontOfSize:14] };
[[UINavigationBar appearance] setTitleTextAttributes:navBarTitleTextAttributes];

Bunu, AppDelegate.m sınıfına didFinishLaunchingWithOptions yöntemine sadece birkaç satır kod ekleyerek yaptım: Bu kodu kullanın:
NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0],UITextAttributeTextColor,
[UIColor clearColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];
[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
benim için çalışıyor ...
Bunu Swift'de yapmanız gerekiyorsa, bu ayarları almanıza veya ayarlamanıza izin vermek için UINavigationBar için bir uzantı oluşturabilirsiniz.
extension UINavigationBar {
var titleColor: UIColor? {
get {
if let attributes = self.titleTextAttributes {
return attributes[NSForegroundColorAttributeName] as? UIColor
}
return nil
}
set {
if let value = newValue {
self.titleTextAttributes = [NSForegroundColorAttributeName: value]
}
}
}
var titleFont: UIFont? {
get {
if let attributes = self.titleTextAttributes {
return attributes[NSFontAttributeName] as? UIFont
}
return nil
}
set {
if let value = newValue {
self.titleTextAttributes = [NSFontAttributeName: value]
}
}
}
}
Daha sonra rengi ve yazı tipini şu şekilde ayarlayabilirsiniz:
navigationBar.titleColor = UIColor.redColor()
navigationBar.titleFont = UIFont.systemFontOfSize(12)
titleColorda titleFonttek başına kullanırsanız işe yarar . Bunları birlikte kullanırsanız self.titleTextAttributes, değişkenlerden biri her çağrıldığında yeni bir değere ayarlanacaktır. Ayarlayıcı, yeni sözlüğü oluştururken muhtemelen diğer değeri alabilir.
Bu, genel bir ayar yerine tek bir gezinti çubuğuna özel bir görünüm ayarlamak için kullanılabilir
- (void)updateTitleWithString:(NSString *)title
{
UIView *headerView = [[UIView alloc] initWithFrame:CGRectZero];
[headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[headerView setAutoresizesSubviews:YES];
CGFloat headFontSize = (IS_SYSTEM_DEVICE_IPAD ? 25.0f : 19.0f);
UIFont *headFont = [UIFont boldSystemFontOfSize: headFontSize ];
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByTruncatingTail];
CGSize size = [title boundingRectWithSize:CGSizeMake(190,headFontSize + 6) options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName : headFont, NSParagraphStyleAttributeName : style} context:nil].size;
headerView.frame = CGRectMake(0, 0,size.width,self.navigationController.navigationBar.frame.size.height);
float labelHeight = headFontSize + 6;
float labelYLoc = ( self.navigationController.navigationBar.frame.size.height - labelHeight ) / 2;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,labelYLoc, size.width,labelHeight)];
label.backgroundColor = [UIColor clearColor];
label.adjustsFontSizeToFitWidth = YES;
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = headFont;
label.text = title;
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.4];
label.lineBreakMode = NSLineBreakByTruncatingTail;
label.shadowOffset = CGSizeMake(0,-1);
label.accessibilityLabel = @"<LABEL>";
[headerView addSubview:label];
self.navigationItem.titleView = headerView;
}
Bu kod satırını kullanın
UILabel *badge_Label=[[UILabel alloc]initWithFrame:CGRectMake(5,3, 15, 15)];
badge_Label.backgroundColor=[UIColor redcolor];
badge_Label.font=[UIFont systemFontOfSize:12];
[badge_Label setText:@"20"];
[self.navigationController.navigationBar addSubview:badgelabel];
Bunun size yardımcı olacağını düşünüyorum.