สีข้อความชื่อแถบการนำทางของ iPhone


283

ดูเหมือนว่าสีหัวเรื่องของ iOS Navigation Bar จะเป็นสีขาว มีวิธีการเปลี่ยนเป็นสีอื่นหรือไม่?

ฉันตระหนักถึงnavigationItem.titleViewวิธีการใช้ภาพ เนื่องจากทักษะการออกแบบของฉันมี จำกัด และฉันไม่สามารถรับความมันมาตรฐานได้ฉันจึงชอบเปลี่ยนสีข้อความ

ความเข้าใจใด ๆ จะได้รับการชื่นชมมาก


ฉันเพิ่งโพสต์โค้ดหนึ่งชิ้นตามคำตอบของ Steven Fisher ที่ทำให้ขั้นตอนการเพิ่มชื่อสีแบบกำหนดเองลงในแถบการนำทางของคุณง่ายขึ้น นอกจากนี้ยังรองรับการเปลี่ยนชื่อ มองหามัน! มันจะไม่ทำให้คุณผิดหวัง
Erik B

1
อิริค: ฉันได้บันทึกเกี่ยวกับคำตอบของคุณไว้ในเหมืองแล้ว ฉันเพียงแค่อัปเดตคำตอบของฉันด้วยรหัสของคุณ แต่ฉันไม่ต้องการที่จะใช้คะแนนของคุณ โซลูชันที่ชาญฉลาด btw
สตีเว่นฟิชเชอร์

คำตอบ:


423

วิธีการที่ทันสมัย

วิธีที่ทันสมัยสำหรับตัวควบคุมการนำทางทั้งหมด ... ทำสิ่งนี้เพียงครั้งเดียวเมื่อมุมมองรูทของตัวควบคุมการนำทางของคุณถูกโหลด

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

อย่างไรก็ตามสิ่งนี้ดูเหมือนจะไม่มีผลในมุมมองที่ตามมา

วิธีการคลาสสิก

วิธีเก่าต่อตัวควบคุมมุมมอง (ค่าคงที่เหล่านี้ใช้สำหรับ iOS 6 แต่ถ้าต้องการทำต่อตัวควบคุมมุมมองบนลักษณะที่ปรากฏของ iOS 7 คุณจะต้องการแนวทางเดียวกัน แต่มีค่าคงที่ต่างกัน):

คุณจำเป็นต้องใช้UILabelเป็นของtitleViewnavigationItem

ฉลากควร:

  • มีสีพื้นหลังที่ชัดเจน ( label.backgroundColor = [UIColor clearColor])
  • ใช้แบบอักษรระบบ 20 พอยต์ตัวหนา ( label.font = [UIFont boldSystemFontOfSize: 20.0f])
  • มีเงาดำ 50% alpha ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5])
  • คุณจะต้องตั้งค่าการจัดแนวข้อความเป็นกึ่งกลางเช่นกัน ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterสำหรับ SDK ที่เก่ากว่า)

ตั้งค่าสีข้อความของฉลากให้เป็นสีที่กำหนดเองที่คุณต้องการ คุณต้องการสีที่ไม่ทำให้ข้อความกลมกลืนซึ่งจะอ่านยาก

ฉันทำสิ่งนี้ผ่านการลองผิดลองถูก แต่ค่านิยมที่ฉันได้รับมานั้นง่ายเกินไปสำหรับพวกเขาที่จะไม่เลือกตามที่ Apple เลือก :)

หากคุณต้องการตรวจสอบนี้วางโค้ดนี้ลงinitWithNibName:bundle:ในPageThreeViewController.mของแอปเปิ้ล NavBar ตัวอย่าง สิ่งนี้จะแทนที่ข้อความด้วยป้ายสีเหลือง สิ่งนี้ควรแยกไม่ออกจากต้นฉบับที่ผลิตโดยรหัสของ Apple ยกเว้นสี

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // this will appear as the title in the navigation bar
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:20.0];
        label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        label.textAlignment = NSTextAlignmentCenter;
                           // ^-Use UITextAlignmentCenter for older SDKs.
        label.textColor = [UIColor yellowColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = NSLocalizedString(@"PageThreeTitle", @"");
        [label sizeToFit];
    }

    return self;
}

แก้ไข: โปรดอ่านคำตอบของ Erik B ด้านล่าง รหัสของฉันแสดงเอฟเฟกต์ แต่รหัสของเขานำเสนอวิธีที่ง่ายกว่าในการนำตัวควบคุมมุมมองที่มีอยู่มาใช้


2
หากคุณตั้งค่ากรอบป้ายกำกับให้มีขนาดของข้อความโดยใช้กรอบการsizeWithFont:จัดตำแหน่งแบบอัตโนมัติจะใช้งานได้อย่างน่าอัศจรรย์กับฉลากมาตรฐาน
grahamparks

1
แต่ถ้าคุณใช้ sizeToFit คุณจะเสียการตัดทอนอัตโนมัติ
สตีเว่นฟิชเชอ

3
หมายเหตุ: นี่เป็นวิธีเก่าแก่ในการตั้งชื่อแบบกำหนดเองฉันขอแนะนำให้อ่านคำตอบของ Erik B
Elia Palme

1
ยืนยันว่า sizeToFit ใช้งานได้คำตอบที่อัปเดตแล้วดังนั้น นอกจากนี้ยังเพิ่มหมายเหตุในการอ่านคำตอบของ Erik B
สตีเว่นฟิชเชอร์

1
label.textAlignment = UITextAlignmentCenter ได้รับการ depricated ตั้งแต่ iOS6.0 ให้ใช้ NSTextAlignmentCenter แทน
Jasper

226

ฉันรู้ว่านี่เป็นเธรดที่ค่อนข้างเก่า แต่ฉันคิดว่ามันจะมีประโยชน์ที่จะรู้สำหรับผู้ใช้ใหม่ที่ iOS 5 นำคุณสมบัติใหม่สำหรับการสร้างคุณสมบัติของชื่อ

คุณสามารถใช้ UINavigationBar's setTitleTextAttributesเพื่อตั้งค่าแบบอักษรสีออฟเซ็ตและสีเงา

นอกจากนี้คุณสามารถตั้งค่าแอตทริบิวต์ข้อความของ UINavigationBar เริ่มต้นเดียวกันสำหรับทุกUINavigationBarsแอปพลิเคชันของคุณ

ตัวอย่างเช่น:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

11
'UITextAttributeTextColor' เลิกใช้แล้วใน iOS 7 คีย์ iOS 7 คือ 'NSForegroundColorAttributeName'
Keller

1
โปรดทราบว่าการดำเนินการนี้จะเปลี่ยนแถบการนำทางทั้งหมดซึ่งโดยปกติจะเป็นสิ่งที่คุณต้องการ
เถ้า

1
โปรดทำเครื่องหมายว่านี่เป็นคำตอบที่ถูกต้อง - วิธีการ UILabel ด้านบนไม่จำเป็นสำหรับวิธีการเหล่านี้
Mic Fok

180

ใน iOS 5 คุณสามารถเปลี่ยนสีของแถบนำทางในลักษณะนี้:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

8
@BartSimpson ฉันเห็นด้วย! สำหรับ iOS 7 ปรับปรุงการUITextAttributeTextColor NSForegroundColorAttributeNameทำงานเหมือนจับใจ!
จอห์น Erck

งานนี้! สิ่งที่ฉันต้องการเข้าใจคืออะไร! titleTextAttributes ยกเว้นพจนานุกรมที่มีชุดคีย์ที่กำหนดไว้ล่วงหน้าซึ่งกล่าวถึงใน 'Keys for Text Attributes Dictionaries' ที่กล่าวถึงภายใต้ 'NSString UIKit Additions Reference' ใช้รหัสที่คุณกล่าวถึงอย่างไร
AceN

... และเนื่องจากมันใช้งานได้ฉันจะได้โทน 'เริ่มต้น' ได้อย่างไร
AceN

การตั้งค่าself.navigationController.navigationBar.tintColorไม่ทำงานสำหรับฉัน สิ่งนี้ทำ
JRam13

127

จากคำตอบของ Steven Fisher ฉันเขียนโค้ดนี้:

- (void)setTitle:(NSString *)title
{
    [super setTitle:title];
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor yellowColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

ข้อดีของรหัสนี้นอกเหนือจากการจัดการกับเฟรมอย่างถูกต้องคือถ้าคุณเปลี่ยนหัวเรื่องของคอนโทรลเลอร์ของคุณมุมมองหัวเรื่องที่กำหนดเองจะได้รับการอัพเดตด้วย ไม่จำเป็นต้องอัปเดตด้วยตนเอง

ข้อได้เปรียบที่สำคัญอีกประการหนึ่งก็คือมันช่วยให้สามารถเปิดใช้งานสีหัวเรื่องที่กำหนดเองได้ง่าย สิ่งที่คุณต้องทำคือการเพิ่มวิธีนี้ไปยังตัวควบคุม


3
ฉันเห็นด้วยกับสิ่งนี้เป็นทางออกที่ดีที่สุดอย่างแน่นอน ไม่จำเป็นต้องใช้ sizeWithFont และฉันชอบความคิดในการเอาชนะเมธอด setTitle
Elia Palme

@ Sr.Richie คุณไม่ควรใส่รหัสในตัวควบคุมการนำทางแบบกำหนดเอง คุณควรใส่ไว้ในทุกมุมมองคอนโทรลเลอร์ที่คุณต้องการเปลี่ยนสีของชื่อ คุณอาจไม่ต้องการแม้แต่ตัวควบคุมการนำทางแบบกำหนดเองด้วยซ้ำ
Erik B

ไม่ได้ผลสำหรับฉัน ผมคิดว่าวิธีการเพราะผมใช้ [UINavigationBar ลักษณะ] .. (ไม่ทำงานเพราะ titleView ฉลากอยู่เสมอไม่มี)
มาเตจ์

1
หากคุณใช้ iOS5 หรือใหม่กว่าคุณควรอ่านคำตอบลบด้วยด้านล่าง มีหนึ่งซับที่ทำงานได้ดีและอยู่ในการจอง
สาหร่าย

เราจำเป็นต้องเพิ่ม self.title = @ "สตริงของเรา"; ใน viewDidLoad.then ทำงานข้างต้นรหัสเท่านั้น
Hari1251

40

คำแนะนำข้างต้นส่วนใหญ่เลิกใช้แล้วในขณะนี้สำหรับการใช้งาน iOS 7 -

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                               [UIColor whiteColor],NSForegroundColorAttributeName, 
                               [UIColor whiteColor],NSBackgroundColorAttributeName,nil];

self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";

นอกจากนี้ให้ชำระเงิน NSAttributedString.h สำหรับคุณสมบัติข้อความต่างๆที่สามารถตั้งค่าได้


38

ใน IOS 7 และ 8 คุณสามารถเปลี่ยนสีของชื่อเป็นสีเขียว

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];

6
สวิฟท์:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee

@ByronCoetsee หลังจากอัปเดตเป็น Swift 2 ฉันมีข้อผิดพลาดต่อไปนี้: ไม่สามารถกำหนดค่าประเภท '[NSObject: AnyObject]' เป็นค่าประเภท '[String: AnyObject]?'
Jorge Casariego

2
ง่ายขึ้นมากใน swift 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia

24

เพื่อให้คำถามทันสมัยฉันจะเพิ่มโซลูชันAlex RRแต่ในSwift :

self.navigationController.navigationBar.barTintColor = .blueColor()
self.navigationController.navigationBar.tintColor = .whiteColor()
self.navigationController.navigationBar.titleTextAttributes = [
    NSForegroundColorAttributeName : UIColor.whiteColor()
]

ผลลัพธ์ใดที่:

ป้อนคำอธิบายรูปภาพที่นี่


อืมบางทีมันอาจใช้ไม่ได้กับ Swift 2.0 ให้ฉันตรวจสอบอีกครั้ง ไม่จำเป็นต้องมีความก้าวร้าว
มิคาล

ขออภัย Michal ฉันคิดว่าเป็นเรื่องตลก! ไม่เป็นสิ่งที่ก้าวร้าว! สิ่งที่ทำงานให้ฉันได้มากขึ้นเช่นนี้: self.navigationController! .navigationBar.titleTextAttributes = NSDictionary (วัตถุ: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) เป็น [NSObject: AnyObject]
Radu

เพิ่มบรรทัดต่อไปนี้: UINavigationBar.appearance (). barStyle = UIBarStyle.Black ก่อนบรรทัดนี้: UINavigationBar.appearance (). tintColor = UIColor.whiteColor () เพื่อให้ tintColor ทำงาน!
triiiiista

2
ใน Swift 4.0: self.navigationController? .navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Abhi Muktheeswarar

14

วิธีที่ 1ตั้งค่าใน IB:

ป้อนคำอธิบายรูปภาพที่นี่

วิธีที่ 2โค้ดหนึ่งบรรทัด:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()

วิธีที่ 2 ไม่ทำงาน ใช้งานได้กับtitleTextAttributesเท่านั้น
Vyachaslav Gerchicov

13

วิธีการแก้ปัญหาโดย tewha ทำงานได้ดีถ้าคุณพยายามที่จะเปลี่ยนสีบนหน้า แต่ฉันต้องการที่จะสามารถเปลี่ยนสีในทุกหน้า ฉันทำการแก้ไขเล็กน้อยเพื่อให้สามารถใช้ได้กับทุกหน้าในUINavigationController

NavigationDelegate.h

//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end

NavigationDelegate.m

#import "NavigationDelegate.h"
@implementation NavigationDelegate

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
    UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    //The two lines below are the only ones that have changed
    label.text=viewController.title;
    viewController.navigationItem.titleView = label;
}
@end

13

ตั้งแต่ iOS 5 เป็นต้นไปเราต้องตั้งค่าสีตัวอักษรหัวเรื่องและฟอนต์ของแถบนำทางโดยใช้ TitleTextAttribute Dictionary (พจนานุกรมที่กำหนดไว้ล่วงหน้าในการอ้างอิงคลาสตัวควบคุม UInavigation)

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];

13

รวดเร็วเวอร์ชั่นของ

ฉันพบว่าพวกคุณส่วนใหญ่แสดงคำตอบของเวอร์ชัน Objective_C

ฉันต้องการใช้งานฟังก์ชั่นนี้โดยใช้ Swift สำหรับทุกคนที่ต้องการมัน

ใน ViewDidload

1. การทำให้พื้นหลัง NavigationBar กลายเป็นสี (ตัวอย่างเช่น: BLUE)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2. ในการทำให้พื้นหลัง NavigationBar กลายเป็นรูปภาพ (เช่น ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3. หากต้องการเปลี่ยนชื่อแถบนำทาง (ตัวอย่าง: [ตัวอักษร: Futura, 10] [สี: สีแดง])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(hint1: อย่าลืมเครื่องหมาย "!" หลัง UIFont)

(คำแนะนำ 2: มีคุณสมบัติมากมายของข้อความชื่อคำสั่งคลิกที่ "NSFontAttributeName" คุณสามารถเข้าชั้นเรียนและดู keyNames และประเภทวัตถุที่ต้องการ)

ฉันหวังว่าฉันสามารถช่วย!: D


10

ใช้รหัสด้านล่างในมุมมองตัวควบคุม viewDidLoad หรือวิธี viewWillAppear ใด ๆ

- (void)viewDidLoad
{
    [super viewDidLoad];

    //I am using UIColor yellowColor for an example but you can use whatever color you like   
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

    //change the title here to whatever you like
    self.title = @"Home";
    // Do any additional setup after loading the view.
}


8

นี่คือวิธีการแก้ปัญหาของฉันตามสตีเว่น

ความแตกต่างที่แท้จริงคือฉันใช้การจัดการเพื่อปรับตำแหน่งถ้าขึ้นอยู่กับความยาวของข้อความดูเหมือนว่าจะคล้ายกับที่ Apple ทำ

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

คุณอาจต้องการปรับค่า 10 ขึ้นอยู่กับขนาดตัวอักษรของคุณ


6

ฉันพบปัญหากับปุ่มนำทางของฉันซึ่งทำให้ข้อความไม่อยู่ตรงกลาง (เมื่อคุณมีเพียงปุ่มเดียว) หากต้องการแก้ไขว่าฉันเพิ่งเปลี่ยนขนาดเฟรมเช่น:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);

6

ฉันได้ปรับแต่งภาพพื้นหลังของ NavigationBar และรายการปุ่มซ้ายและชื่อสีเทาไม่พอดีกับพื้นหลัง จากนั้นฉันจะใช้:

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

เพื่อเปลี่ยนสีอ่อนเป็นสีเทา และชื่อเป็นสีขาวในขณะนี้! นั่นคือสิ่งที่ฉันต้องการ.

หวังว่าจะช่วยด้วย :)


ดี แต่ใช้งานได้กับการเปลี่ยนข้อความเป็นสีขาวเท่านั้น แม้แต่การย้อมสี navBar ด้วย [UIColor whiteColor] ก็เปลี่ยนสีของตัวอักษรเป็นสีขาว
cschuff

6

ขอแนะนำให้ตั้งค่า self.title เนื่องจากจะใช้ในขณะที่กด navbars ลูกหรือแสดงชื่อบน tabbars

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}

6

นี่เป็นเธรดที่ค่อนข้างเก่า แต่ฉันคิดว่าจะให้คำตอบสำหรับการตั้งค่าสีขนาดและตำแหน่งแนวตั้งของแถบชื่อเรื่องการนำทางสำหรับ iOS 7 ขึ้นไป

สำหรับสีและขนาด

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

สำหรับตำแหน่งแนวตั้ง

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

ตั้งชื่อและกำหนดพจนานุกรมคุณสมบัติ

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;

5

สิ่งนี้ใช้ได้กับฉันใน Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]

ค่อนข้างใกล้เคียง แต่สิ่งที่เป็นในแบบของคุณจะเขียนทับคุณลักษณะที่เป็นไปได้ทั้งหมดในชื่อ ในกรณีของฉันนั่นคือแบบอักษร รหัสที่ฉันลงเอยด้วยคือnavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak

ทำได้ดี. เช่นเดียวกันสำหรับ Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov


4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];

3

เพื่อกำหนดขนาดตัวอักษรของชื่อฉันได้ใช้เงื่อนไขต่อไปนี้ .. อาจเป็นประโยชน์กับทุกคน

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;

3

การปรับปรุงการโพสต์ของ Alex RR โดยใช้คุณลักษณะข้อความใหม่ของ iOS 7 และวัตถุประสงค์ที่ทันสมัย

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

3

ฉันเชื่อว่าวิธีการตั้งค่าสีที่เหมาะสมUINavigationBarคือ:

NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;

โค้ดด้านบนเขียนเป็น subclass on UINavigationBar, ทำงานได้อย่างชัดเจนโดย subclassing เช่นกัน


ถูกต้อง แต่ iOS 5 เท่านั้น มันนานพอแล้วตั้งแต่ iOS 5 เปิดตัวว่าเป็นทางออกที่ดี และเนื่องจากเราอยู่ในโลก iOS 5 จึงน่าสังเกตว่าเราสามารถใช้[UINavigationBar appearance]และตั้งค่าคุณสมบัติข้อความชื่อเรื่องได้ (พิจารณาเล่ห์เหลี่ยมที่เกี่ยวข้องกับคลาสย่อยUINavigationBarซึ่งเป็นโซลูชันที่ดีกว่า)
Ivan Vučica

@stringCode คุณสามารถเริ่มต้นรหัสข้างต้นได้โดยไม่ต้อง "self.navigationController.navigationBar.titleTextAttributes = attribute;"?
Gajendra K Chauhan

3

ใช้สิ่งนี้เพื่อรองรับการปฐมนิเทศ

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];

2

นี่คือหนึ่งในสิ่งที่ขาดหายไป ทางออกที่ดีที่สุดของคุณคือการสร้างแถบการนำทางที่กำหนดเองของคุณเพิ่มกล่องข้อความและปรับแต่งสีด้วยวิธีดังกล่าว


ฉันกำลังติดตามความคิดของคุณ :) ฉันควรจะใช้วิธีการใดแทนการเริ่มเล่นชื่อ ขออภัยฉันเป็น n00b :(
Sr.Richie

2

หลังจากพบปัญหาเดียวกัน (เช่นเดียวกับคนอื่น ๆ ) ของป้ายกำกับที่เคลื่อนที่เมื่อเราใส่ปุ่มใน navBar (ในกรณีของฉันฉันมีตัวหมุนที่ฉันแทนที่ด้วยปุ่มเมื่อโหลดวันที่) โซลูชันข้างต้นไม่ทำงาน สำหรับฉันดังนั้นนี่คือสิ่งที่ทำงานและเก็บฉลากไว้ในที่เดียวกันตลอดเวลา:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // this will appear as the title in the navigation bar
    //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
   CGRect frame = CGRectMake(0, 0, 180, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];



    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    self.navigationItem.titleView = label;
    label.text = NSLocalizedString(@"Latest Questions", @"");
    [label sizeToFit];
}

return self;

1

คุณควรเรียก [label sizeToFit]; หลังจากตั้งค่าข้อความเพื่อป้องกันการชดเชยผิดปกติเมื่อมีการเปลี่ยนตำแหน่งฉลากในมุมมองหัวเรื่องโดยอัตโนมัติเมื่อปุ่มอื่น ๆ ใช้แถบนำทาง


1

สามารถใช้วิธีนี้ในไฟล์ appdelegate และสามารถใช้ได้ทุกมุมมอง

+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;    
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)]; 
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];

//label.text = NSLocalizedString(title, @"");

return label;
}

1

titleTextAttributes แสดงคุณสมบัติสำหรับข้อความชื่อของบาร์

@property (nonatomic, copy) NSDictionary * titleTextAttributes Discussion คุณสามารถระบุแบบอักษรสีข้อความสีเงาของข้อความและ text shadow ชดเชยสำหรับชื่อในพจนานุกรมแอตทริบิวต์ข้อความโดยใช้คีย์แอตทริบิวต์ข้อความที่อธิบายไว้ใน NSString UIKit เพิ่มการอ้างอิง

มีให้บริการใน iOS 5.0 และใหม่กว่า ประกาศใน UINavigationBar.h

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.