使用标题视图自定义导航栏

我试图在导航栏的中心添加自定义视图,我正在使用以下代码来测试它:

UIView * testView = [[UIView alloc] init]; [testView setBackgroundColor:[UIColor blackColor]]; testView.frame = CGRectMake(0, 0, 100, 35); [self.navigationController.navigationItem.titleView addSubview:testView]; 

我在我的视图控制器的viewDidLoad方法中设置它,但是当我运行我的程序时,我的导航栏中似乎没有任何变化。

你能帮我这个吗?

这很有效。 在初始化时给出框架

  UIView *iv = [[UIView alloc] initWithFrame:CGRectMake(0,0,32,32)]; [iv setBackgroundColor:[UIColor whiteColor]]; self.navigationItem.titleView = iv; 

如果您只想为一个视图控制器自定义标题,则可以使用

 UILabel *lblTitle = [[UILabel alloc] init]; lblTitle.text = @"Diga-nos o motivo"; lblTitle.backgroundColor = [UIColor clearColor]; lblTitle.textColor = [UIColor colorWithRed:77.0/255.0 green:77.0/255.0 blue:77.0/255.0 alpha:1.0]; lblTitle.shadowColor = [UIColor whiteColor]; lblTitle.shadowOffset = CGSizeMake(0, 1); lblTitle.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18.0]; [lblTitle sizeToFit]; self.navigationItem.titleView = lblTitle; 

或者如果要为所有视图控制器使用自定义

 [[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:10.0], UITextAttributeFont, nil]]; 

更换

 [self.navigationController.navigationItem.titleView addSubview:testView]; 

 self.navigationItem.titleView = testView; 

编辑:

注意:您无法将子视图添加到titleView,因为它的默认值为nil ,您需要将新视图设置为titleView。

 CustomLabel *titleLabel = [CustomLabel initWithLabelFrame:labelFrame textFont:[UIFont fontWithName:@"Helvetica" size:[UIFont systemFontSize]] textColor:[UIColor blackColor] labelText:@"Add as" textAlignment:NSTextAlignmentCenter labelOnView:reference.view labelTag:62]; [self.navigationItem setTitleView:titleLabel]; // titleLabel set in navigationItem 

您将需要使用故事板来支持iPhone 6和更新(更大)的设备。

为自定义导航项目标题/副标题等创建容器视图,并将其拖动到可视编辑器(而不是视图层次结构中)。

 #import  @interface MasterViewController : UITableViewController @end #import "MasterViewController.h" @interface MasterViewController () @end @implementation MasterViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.titleView = [self titleView]; } - (UIView *)titleView { CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height; CGFloat width = 0.95 * self.view.frame.size.width; UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, navBarHeight)]; UIImage *logo = [UIImage imageNamed:@"logo.png"]; UIButton *logoButton = [UIButton buttonWithType:UIButtonTypeCustom]; CGFloat logoY = floorf((navBarHeight - logo.size.height) / 2.0f); [logoButton setFrame:CGRectMake(0, logoY, logo.size.width, logo.size.height)]; [logoButton setImage:logo forState:UIControlStateNormal]; UIImage *bubble = [UIImage imageNamed:@"notification-bubble-empty.png"]; UIImageView *bubbleView = [[UIImageView alloc] initWithImage:bubble]; const CGFloat Padding = 5.0f; CGFloat bubbleX = logoButton.frame.size.width + logoButton.frame.origin.x + Padding; CGFloat bubbleY = floorf((navBarHeight - bubble.size.height) / 2.0f); CGRect bubbleRect = bubbleView.frame; bubbleRect.origin.x = bubbleX; bubbleRect.origin.y = bubbleY; bubbleView.frame = bubbleRect; [containerView addSubview:logoButton]; [containerView addSubview:bubbleView]; return containerView; } @end 

斯威夫特3

 let myImageView = UIImageView(image: <...set your image...>) override fun viewDidLoad(){ super.viewDidLoad() self.navigationItem.titleView = myImageView // } 

另一个替代解决方案是

 override fun viewWillAppear(_ animated: Bool) { super. viewWillAppear(animated) self.navigationItem.titleView = myImageView } 

我建议使用viewDidLoad来设置你的titleView

斯威夫特3/4

您可以将UILabel设置为titleView 。 在viewDidLoad()调用它:

 private func setNavigationTitle(_ title: String) { navigationItem.title = nil // clear the default title let titleLabel = UILabel() // you don't need to specify a frame, it will be centred in the navbar titleLabel.font = ... titleLabel.textColor = ... titleLabel.text = title titleLabel.backgroundColor = .clear navigationItem.titleView = titleLabel navigationTitleView = titleLabel // you may create a property if you want to manipulate the title view later } 

注意 navigationItem.title = nil ,否则title可能会覆盖titleView

Interesting Posts