2012-03-28 9 views
7

Tôi không có nhiều may mắn định tâm theo chiều dọc nhãn tôi đang thêm vào TitleView trên UINavigationBar. Bạn có thể thấy nó trông như thế nào bên dưới.Nhãn trung tâm Theo chiều dọc trong UINavigationBar TitleView

Text not vertically aligned

Đây là cách tôi thêm nhãn:

UILabel *titleLabel = [[UILabel alloc] init]; 
titleLabel.text = NSLocalizedString(@"activeSessionsTitle",@""); 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

super.navigationItem.titleView = titleLabel; 

Tôi nghĩ lý do tại sao nó làm điều này là có cái gì đó kỳ lạ với font thực tế tôi đang sử dụng - như Tôi đã phải làm rất nhiều thay đổi vị trí bên trong các nút và như vậy. Tôi đã có thể giải quyết vấn đề ở mọi nơi nhưng thanh điều hướng.

+0

Xem bài đăng này http://stackoverflow.com/a/8475788/716216 –

Trả lời

11

tôi đã kết thúc bằng một sự kết hợp của RPM câu trả lời trái và một trong những ý kiến ​​về câu hỏi của tôi. Đây là những gì cuối cùng cố định nó cho tôi:

UIView *customTitleView = [[UIView alloc] init]; 
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 3.0f, 200.0f, 30.0f)]; 
titleLabel.text = titleString; 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

customTitleView.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

[customTitleView addSubview:titleLabel]; 
[titleLabel release]; 

[self.navigationItem setTitleView:customTitleView]; 
[customTitleView release]; 

Nếu bạn đang sử dụng đoạn mã này, bạn có thể phải chơi với các giá trị "y" trên initWithFrame nhãn tiêu đề: gọi. Tôi có nó được thiết lập để 3.0f, nhưng bạn có thể phải điều chỉnh nó một chút cho việc sử dụng của riêng bạn.

Lý do các giải pháp khác dường như không hoạt động đối với tôi là chúng sẽ đi lệch tâm theo chiều ngang phụ thuộc nếu tôi có một nút thịt (trái hoặc phải). Nếu không có nút nào thì nó vẫn ổn, và nếu có hai cái thì tốt. Nhưng một người sẽ khiến nó rời khỏi trung tâm.

+0

Tuyệt vời cho iOS dưới 5, nhưng đối với iOS 5 trở đi bạn có API xuất hiện và bạn không cần phải làm điều này, vì vậy hãy xem @ Moe trả lời. – bandejapaisa

1

Tôi không nghĩ rằng điều này có liên quan đến phông chữ của bạn. Tôi cũng đã sử dụng titleView và tôi nghĩ cách nó đưa ra chế độ xem theo cách kỳ lạ và không xem xét kích thước của bạn là gì.

Bạn cũng có thể thiết lập các khung xem nhãn của bạn như vậy

titleLabel.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

self.navigationItem.titleView = titleLabel; 
+0

này dường như không tạo sự khác biệt - Mặc dù tôi đã sử dụng câu trả lời của bạn theo một cách khác! – Hosemeyer

+0

À vâng - bạn cần phải thêm nó vào chế độ xem siêu và gán nó làm chế độ xem tiêu đề. Tôi xin lỗi - tôi nên nói với bạn điều đó sớm hơn. Tôi biết điều đó :( – RPM

+0

Thực tế tiêu đề nhãn là gì? –

28

Mở Câu hỏi cũ nhưng tôi thấy điều này rất hữu ích.

iOS 5 cho phép bạn để sử dụng [UINavigationBar appearance] đó là rất tốt cho việc thay đổi cái nhìn tiêu đề Tiêu đề thanh của mà không cần một UIView tùy chỉnh:

[[UINavigationBar appearance] setTitleTextAttributes: 
     [NSDictionary dictionaryWithObjectsAndKeys: 
      [UIColor redColor], 
      UITextAttributeTextColor, 
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
      UITextAttributeTextShadowColor, 
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
      UITextAttributeTextShadowOffset, 
      [UIFont fontWithName:@"HelveticaNeue" size:25.0f], 
      UITextAttributeFont, 
      nil]]; 

Đôi khi, tùy thuộc vào UIFont mà bạn sử dụng, quan điểm tiêu đề có thể được tắt theo chiều dọc.

Để sửa lỗi này, bạn có thể sử dụng:

[self.navigationBar setTitleVerticalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault]; 

(float) là một giá trị tích cực để đẩy titleView xuống, và một giá trị âm để đẩy titleView lên.

Tôi hy vọng điều này sẽ hữu ích.

+7

Bạn cũng có thể đặt điều chỉnh vị trí dọc bằng cách sử dụng giao diện UINavigationBar, nghĩa là: '[[UINavigationBar xuất hiện] setTitleVerticalPositionAdjustment: (float) forBarMetrics: UIBarMetricsDefault];' –

+2

bạn vừa lưu cổ của tôi, thưa bạn! lấy upvote của tôi! :) – nburk

+0

Bạn đang chào đón nburk. :) – Moe

0
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,NSForegroundColorAttributeName:UIColor.whiteColor()] 
+1

Không phải những gì OP yêu cầu. – Cesare