iPhone Navigation Bar Tiêu đề màu văn bản


283

Có vẻ như màu tiêu đề iOS Navigation Bar là màu trắng theo mặc định. Có cách nào để thay đổi nó sang một màu khác không?

Tôi nhận thức được navigationItem.titleViewcách tiếp cận bằng cách sử dụng một hình ảnh. Vì kỹ năng thiết kế của tôi bị hạn chế và tôi không thể có được độ bóng chuẩn, tôi thích thay đổi màu văn bản.

Bất kỳ cái nhìn sâu sắc sẽ được nhiều đánh giá cao.


Tôi vừa đăng một đoạn mã, dựa trên câu trả lời của Steven Fisher, giúp đơn giản hóa quá trình thêm tiêu đề màu tùy chỉnh vào thanh điều hướng của bạn. Nó cũng hỗ trợ thay đổi tiêu đề. Tìm nó! Nó sẽ không làm bạn thất vọng.
Erik B

1
Erik: Tôi đã ghi chú về câu trả lời của bạn vào câu hỏi của tôi. Tôi chỉ cập nhật câu trả lời của tôi với mã của bạn, nhưng tôi sẽ không muốn lấy phiếu bầu của bạn. Giải pháp thông minh, btw.
Steven Fisher

Câu trả lời:


423

Cách tiếp cận hiện đại

Cách hiện đại, đối với toàn bộ bộ điều khiển điều hướng, hãy thực hiện việc này một lần, khi chế độ xem gốc của bộ điều khiển điều hướng của bạn được tải.

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

Tuy nhiên, điều này dường như không có ảnh hưởng trong các lần xem tiếp theo.

Cách tiếp cận cổ điển

Cách cũ, bộ điều khiển cho mỗi chế độ xem (các hằng số này dành cho iOS 6, nhưng nếu muốn thực hiện theo bộ điều khiển xem trên giao diện iOS 7, bạn sẽ muốn có cùng một cách tiếp cận nhưng với các hằng số khác nhau):

Bạn cần sử dụng một UILabelnhư là titleViewcủa navigationItem.

Nhãn nên:

  • Có màu nền rõ ràng ( label.backgroundColor = [UIColor clearColor]).
  • Sử dụng phông chữ hệ thống 20pt đậm ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Có một bóng đen với 50% alpha ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Bạn cũng muốn đặt căn chỉnh văn bản thành chính giữa ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterđối với SDK cũ hơn).

Đặt màu văn bản nhãn thành bất kỳ màu tùy chỉnh nào bạn muốn. Bạn thực sự muốn một màu không làm cho văn bản bị hòa vào bóng, rất khó đọc.

Tôi đã giải quyết vấn đề này thông qua bản dùng thử và lỗi, nhưng các giá trị tôi đưa ra cuối cùng quá đơn giản để chúng không phải là những gì Apple chọn. :)

Nếu bạn muốn xác minh điều này, thả mã này vào initWithNibName:bundle:trong PageThreeViewController.mcủa Apple mẫu NavBar . Điều này sẽ thay thế văn bản bằng một nhãn màu vàng. Điều này không thể phân biệt được với bản gốc được sản xuất bởi mã của Apple, ngoại trừ màu sắc.

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

Chỉnh sửa: Ngoài ra, đọc câu trả lời của Erik B bên dưới. Mã của tôi cho thấy hiệu ứng, nhưng mã của anh ta cung cấp một cách đơn giản hơn để thả nó vào vị trí trên bộ điều khiển xem hiện có.


2
Nếu bạn đặt khung nhãn thành kích thước của văn bản bằng cách sử dụng sizeWithFont:, nó sẽ thực hiện một cách kỳ diệu hành vi căn chỉnh tự động của nhãn tiêu chuẩn.
grahamparks

1
Nhưng nếu bạn sử dụng sizeToFit, bạn sẽ mất tự động cắt ngắn.
Steven Fisher

3
LƯU Ý: đây là cách cũ để đặt tiêu đề tùy chỉnh, tôi đề nghị đọc câu trả lời của Erik B.
Elia Palme

1
Xác nhận rằng sizeToFit hoạt động, vì vậy câu trả lời được cập nhật. Ngoài ra, thêm ghi chú để đọc câu trả lời của Erik B.
Steven Fisher

1
nhãn.textAlocation = UITextAlocateCenter đã được sử dụng kể từ iOS6.0, thay vào đó, hãy sử dụng NSTextAlocateCenter
Jasper

226

Tôi biết đây là một chủ đề khá cũ, nhưng tôi nghĩ sẽ hữu ích khi biết cho người dùng mới rằng iOS 5 mang đến một thuộc tính mới để thiết lập các thuộc tính tiêu đề.

Bạn có thể sử dụng UINavestionBar's setTitleTextAttributesđể đặt phông chữ, màu sắc, độ lệch và màu bóng.

Ngoài ra, bạn có thể đặt các Thuộc tính Văn bản Tiêu đề của UINavestionBar mặc định cho tất cả các UINavigationBarsứng dụng của mình.

Ví dụ như vậy:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

11
'UITextAttributionTextColor' không được dùng trong iOS 7. Khóa iOS 7 là 'NSForegroundColorAttributionName'
Keller

1
Lưu ý rằng điều này sẽ thay đổi TẤT CẢ các thanh điều hướng, thường là những gì bạn muốn.
Tro

1
Vui lòng đánh dấu đây là câu trả lời đúng - phương pháp UILabel ở trên là không cần thiết với các phương thức này có sẵn.
Mic Fok

180

Trong iOS 5, bạn có thể thay đổi màu tiêu đề navigationBar theo cách này:

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

8
@BartSimpson Tôi đồng ý! Đối với iOS 7, hãy cập nhật UITextAttributeTextColorlên NSForegroundColorAttributeName. Hoạt động như một lá bùa!
John Erck

NHỮNG CÔNG VIỆC NÀY! điều tôi muốn hiểu là thế nào?! titleTextAttribution chấp nhận một từ điển với một bộ khóa được xác định trước được đề cập trong 'Khóa cho từ điển thuộc tính văn bản' được đề cập trong phần 'Tham khảo bổ sung UIKit của NSString'. Làm thế nào để nó lấy chìa khóa bạn đề cập.
AceN

... và vì nó đang hoạt động, làm thế nào để tôi có được màu 'mặc định'?
AceN

Cài đặt self.navigationController.navigationBar.tintColorkhông làm việc cho tôi. Điều này đã làm.
JRam13

127

Dựa trên câu trả lời của Steven Fisher, tôi đã viết đoạn mã này:

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

Ưu điểm của mã này, bên cạnh việc xử lý khung đúng cách, là nếu bạn thay đổi tiêu đề của trình điều khiển, chế độ xem tiêu đề tùy chỉnh cũng sẽ được cập nhật. Không cần cập nhật thủ công.

Một lợi thế lớn khác là nó làm cho nó thực sự đơn giản để kích hoạt màu tiêu đề tùy chỉnh. Tất cả bạn cần làm là thêm phương thức này vào bộ điều khiển.


3
Tôi đồng ý rằng đây là giải pháp tốt nhất. Không cần sử dụng sizeWithFont và tôi thích ý tưởng ghi đè phương thức setTitle.
Elia Palme

@ Sr.Richie Bạn không nên đặt mã trong bộ điều khiển điều hướng tùy chỉnh. Bạn nên đặt nó trong tất cả các bộ điều khiển xem, nơi bạn cần thay đổi màu của tiêu đề. Bạn có thể thậm chí không muốn một bộ điều khiển điều hướng tùy chỉnh.
Erik B

Không làm việc cho tôi. Tôi nghĩ rằng đó là vì tôi đã sử dụng phương thức [UINavlationBar xuất hiện] .. (không hoạt động vì tiêu đề nhãn luôn luôn là không)
Matej

1
Nếu bạn đang dùng iOS5 trở lên, bạn nên đọc câu trả lời trừ bên dưới. Có một lớp lót hoạt động tốt và giữ chỗ.
tảo

chúng ta cần thêm self.title = @ "chuỗi của chúng tôi"; trong viewDidLoad.then chỉ ở trên mã hoạt động.
Hari1251

40

Hầu hết các đề xuất trên hiện không được chấp nhận, đối với việc sử dụng iOS 7 -

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

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

Ngoài ra, hãy kiểm tra NSAttributionString.h để biết các thuộc tính văn bản khác nhau có thể được đặt.


38

Trong iOS 7 và 8, bạn có thể thay đổi màu của Tiêu đề thành giả sử màu xanh lá cây

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

6
Swift:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee

@ByronCoetsee sau khi cập nhật lên Swift 2 Tôi gặp lỗi sau: Không thể gán giá trị của loại '[NSObject: AnyObject]' cho giá trị của loại '[String: AnyObject]?'
Jorge Casariego

2
Rất dễ dàng hơn trong swift 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia

24

Để cập nhật câu hỏi, tôi sẽ thêm giải pháp Alex RR , nhưng trong Swift :

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

Kết quả nào:

nhập mô tả hình ảnh ở đây


Hmmm, có lẽ nó không hoạt động cho Swift 2.0. Để tôi kiểm tra hai lần. Không cần sự xâm lược mặc dù.
Michal

Xin lỗi Michal, tôi đã nghĩ đó là một trò đùa! Không phải là một cái gì đó gây áp lực! Có gì làm việc đối với tôi là như thế này: self.navigationController .navigationBar.titleTextAttributes = NSDictionary (object: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) as [NSObject: AnyObject]
Radu

Thêm dòng sau: UINavlationBar.appparent (). BarStyle = UIBarStyle.Black Trước dòng này: UINavlationBar.appparent (). TintColor = UIColor.whiteColor () Để làm cho tintColor hoạt động!
triiiiista

2
Trong Swift 4.0: self.navlationControll? .NavlationBar.titleTextAttribut = [NSAttributionStringKey.forgroundColor: UIColor.white]
Abhi Muktheeswarar

14

Phương pháp 1 , đặt nó trong IB:

nhập mô tả hình ảnh ở đây

Phương pháp 2 , một dòng mã:

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

phương pháp 2 không hoạt động. Làm việc với titleTextAttributeschỉ
Vyachaslav Gerchicov

13

Giải pháp của tewha hoạt động tốt nếu bạn đang cố gắng thay đổi màu trên một trang, nhưng tôi muốn có thể thay đổi màu trên mỗi trang. Tôi đã thực hiện một số sửa đổi nhỏ để nó có thể hoạt động cho tất cả các trang trênUINavigationController

Điều hướngDelegate.h

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

Điều hướngDelegate.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

Từ iOS 5 trở đi, chúng ta phải đặt màu văn bản tiêu đề và phông chữ của thanh điều hướng bằng cách sử dụng titleTextAttribution Dictionary (từ điển được xác định trước trong tham chiếu lớp trình điều khiển UInavulation).

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

13

Phiên bản Swift

Tôi thấy hầu hết các bạn đã trình bày câu trả lời của phiên bản Objective_C

Tôi muốn thực hiện chức năng này bằng cách sử dụng Swift cho bất kỳ ai cần nó.

Trong ViewDidload

1.Để làm cho nền NavigationBar trở thành màu (ví dụ: BLUE)

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

2.Để biến nền NavigationBar trở thành Hình ảnh (ví dụ: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

3. Để thay đổi tiêu đề NavigationBar (ví dụ: [Phông chữ: Futura, 10] [Màu: Đỏ])

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

(gợi ý1: đừng quên dấu "!" sau UIFont)

(gợi ý 2: có rất nhiều thuộc tính của văn bản tiêu đề, lệnh nhấp vào "NSFontAttributionName" bạn có thể nhập lớp và xem keyNames và các loại Đối tượng họ yêu cầu)

Tôi hy vọng tôi có thể giúp! D


10

Sử dụng mã dưới đây trong bất kỳ phương thức xem trình điều khiển viewDidLoad hoặc 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.
}

9

Ngắn và ngọt.

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

8

Đây là giải pháp của tôi dựa trên Stevens

Chỉ có sự khác biệt thực sự là tôi đặt một số xử lý để điều chỉnh vị trí nếu tùy thuộc vào độ dài văn bản, dường như tương tự như cách apple làm điều đó

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

Bạn có thể muốn điều chỉnh 10 giá trị tùy thuộc vào kích thước phông chữ của bạn


6

Tôi gặp vấn đề với các nút điều hướng của mình ném văn bản ra khỏi trung tâm (khi bạn chỉ có một nút). Để khắc phục, tôi chỉ thay đổi kích thước khung hình của mình như vậy:

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

6

Tôi đã tùy chỉnh hình nền của navigationBar và mục nút bên trái và tiêu đề màu xám không phù hợp với nền. Sau đó tôi sử dụng:

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

để thay đổi màu sắc sang màu xám. Và tiêu đề là màu trắng bây giờ! Đó là điều tôi muốn.

Mong cũng được giúp đỡ :)


Đẹp nhưng điều đó chỉ hoạt động để thay đổi văn bản thành màu trắng. Ngay cả việc tô màu navBar bằng [UIColor whiteColor] cũng thay đổi màu văn bản thành màu trắng.
cschuff

6

Bạn nên đặt self.title vì nó được sử dụng trong khi đẩy các thanh điều hướng con hoặc hiển thị tiêu đề trên các tab.

- (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

Đây là một chủ đề khá cũ nhưng tôi nghĩ sẽ cung cấp câu trả lời cho việc đặt Màu sắc, Kích thước và Vị trí dọc của Tiêu đề Thanh điều hướng cho iOS 7 trở lên

Đối với màu sắc và kích thước

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

Đối với vị trí dọc

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

Đặt tiêu đề và gán từ điển thuộc tính

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

5

Điều này làm việc cho tôi trong Swift:

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

Khá gần nhưng điều là cách của bạn sẽ ghi đè lên tất cả các thuộc tính có thể có trên tiêu đề. Trong trường hợp của tôi đó là phông chữ. Mã tôi đã kết thúc lànavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak

Hoạt động tốt. Điều tương tự đối với Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov

5

Phiên bản Swift 4 & 4.2:

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]

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

3

để đặt kích thước phông chữ của tiêu đề tôi đã sử dụng các điều kiện sau đây .. có thể hữu ích cho bất kỳ ai

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

3

Một bản cập nhật cho bài đăng của Alex RR sử dụng các thuộc tính văn bản iOS 7 mới và mục tiêu hiện đại c để ít nhiễu hơn:

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

Tôi tin rằng cách thích hợp để thiết lập màu sắc UINavigationBarlà:

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

Mã ở trên được viết là lớp con trên UINavigationBar, rõ ràng hoạt động mà không cần phân lớp.


Đúng, nhưng chỉ có iOS 5. Đã đủ lâu kể từ khi iOS 5 phát hành rằng đó là một giải pháp tốt. Và vì chúng ta đang ở trong thế giới iOS 5, đáng chú ý rằng người ta có thể sử dụng [UINavigationBar appearance]và đặt các thuộc tính văn bản tiêu đề ở đó (xem xét các mánh khóe liên quan đến phân lớp UINavigationBar, một giải pháp thích hợp hơn).
Ivan Vučica

@ StringCode. Bạn có thể khởi tạo mã ở trên mà không có "self.navlationControll.navlationBar.titleTextAttribut = thuộc tính;" không?
Gajendra K Chauhan

3

Sử dụng như thế này để hỗ trợ Định hướng

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

Đây là một trong những điều còn thiếu. Đặt cược tốt nhất của bạn là tạo Thanh điều hướng tùy chỉnh của riêng bạn, thêm một hộp văn bản và thao tác màu theo cách đó.


Tôi đang làm theo ý tưởng của bạn :) tôi nên ghi đè phương thức nào để bắt đầu chơi với tiêu đề? Xin lỗi, tôi thực sự là một n00b :(
Sr.Richie

2

Sau khi gặp cùng một vấn đề (như các vấn đề khác) của nhãn di chuyển khi chúng ta chèn một nút trong navBar (trong trường hợp của tôi, tôi có một công cụ quay vòng thay thế bằng một nút khi ngày được tải), các giải pháp trên không hoạt động đối với tôi, vì vậy đây là những gì đã làm việc và giữ nhãn ở cùng một nơi mọi lúc:

- (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

Bạn nên gọi [nhãn sizeToFit]; sau khi đặt văn bản để ngăn chặn các lỗi lạ khi nhãn được tự động định vị lại trong chế độ xem tiêu đề khi các nút khác chiếm thanh điều hướng.


1

Có thể sử dụng phương pháp này trong tệp appdelegate và có thể sử dụng ở mọi chế độ xem

+(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

titleTextAttribution Hiển thị thuộc tính cho văn bản tiêu đề của thanh.

@oster

Tính khả dụng Có sẵn trong iOS 5.0 trở lên. Được khai báo trong UINavestionBar.h

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.