如何在 Objective-C 中导航栏的中心添加图像?

Posted

技术标签:

【中文标题】如何在 Objective-C 中导航栏的中心添加图像?【英文标题】:How to add a image at the center of navigationBar in Objective-C? 【发布时间】:2015-03-28 13:41:05 【问题描述】:

我在ios开发,我用下面的代码给navigationBar设置背景。

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];

我想在navigationBarnavigationBar 的中心添加一张图片,如下图所示。

Objective-C中如何在navigationBar的中心添加图片?

提前致谢。

【问题讨论】:

【参考方案1】:

如下所示设置导航标题视图

self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];


编辑: 如果您有大图像,请使用以下代码
UIImage *img = [UIImage imageNamed:@"1.png"];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[imgView setImage:img];
// setContent mode aspect fit
[imgView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imgView;

【讨论】:

kampai さま 图片很大吗?您还可以像 nitin 建议的那样设置图像框架,创建图像由您决定 给我图片链接,我会给上传演示应用程序 好的,请等待 10 分钟将返回演示链接 你是我今天的英雄!!【参考方案2】:

正如您所说,为应用程序设置图标。您可能想这样做,它将显示整个应用程序的图标。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
CGSize imageSize = CGSizeMake(40, 40);
CGFloat marginX = (self.navigationController.navigationBar.frame.size.width / 2) - (imageSize.width / 2);

imageView.frame = CGRectMake(marginX, 0, imageSize.width, imageSize.height);
[self.navigationController.navigationBar addSubview:imageView];

输出:

【讨论】:

【参考方案3】:

我遇到了同样的问题,因为 iOS 11 和 Xcode 9 开始使用自动布局而不是框架来管理导航栏,您应该注意导航栏布局。

在 WWDC Session 204,Updating your app for iOS 11,声明 UIToolBar 和 UINavigationBar 已升级为使用自动布局,为了避免零大小的自定义视图,您应该了解一些有关它的事情。

p>

UINavigation 和 UIToolBar 提供位置,不用管它。

您必须为自定义视图的大小提供以下选项之一:

宽度和高度的约束。 实现intrinsicContentSize 通过约束连接您的子视图。

回答你的问题,我用 ImageView 设置了 titleView,以两种不同的方式提供大小:

明确给出高度和宽度。

-(void)updateNavTitleView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
    [imageView.widthAnchor constraintEqualToConstant:160].active = YES;
    [imageView.heightAnchor constraintEqualToConstant:44].active = YES;
    self.navigationItem.titleView = imageView;

或者设置aspect模式为aspectFit

-(void) updateNavTitleView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
    [imageView setContentMode:UIViewContentModeScaleAspectFit];
    self.navigationItem.titleView = imageView;

如果您想观看会议,Session 204

【讨论】:

【参考方案4】:

这里要提到的一件事是 UIImageView 使用 3 的宽度。这很重要——如果它是 2(或任何偶数),那么图像将是模糊的。设置 clipToBounds=NO 和 contentMode=UIViewContentModeScaleAspectFill 意味着图像将显示在图像视图的宽度之外(精细),并且将正确地成比例。

UIImageView *imageView = [[UIImageView alloc]
        initWithFrame:CGRectMake(0,0,3,44)];
    imageView.contentMode = UIViewContentModeScaleAspectFill;
    imageView.clipsToBounds = NO;
    imageView.image = [UIImage imageNamed:@"navigation-logo"];
    controller.navigationItem.titleView = imageView;

【讨论】:

【参考方案5】:
 viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];

【讨论】:

【参考方案6】:

如果有人需要在 Swift (4.2) 中执行上述操作:

写下以下函数:

func addMiddleImage()
    //Initialize your UIImage
    let yourImage = UIImage(named: "imageName")!.withRenderingMode(.alwaysOriginal)

    //Initialize a UIImageView
    let imageView = UIImageView(image: yourImage)

    //Set your Navigation Bar to the inialized UIImageView
    self.navigationItem.titleView = imageView


将其添加到您的 ViewDidLoad() 回调中:

 override func viewDidLoad() 
    super.viewDidLoad()
    self.addMiddleImage()

祝你好运

【讨论】:

【参考方案7】:

试试这个:

 UIImage *logo = [UIImage imageNamed:@"logo.png"];
 UIImageView *imageView = [[UIImageView alloc] initWithImage: logo];
 imageView.frame = CGRectMake(160, 2, 40, 40);
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo];

【讨论】:

【参考方案8】:
UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;

【讨论】:

以上是关于如何在 Objective-C 中导航栏的中心添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何将SharePoint顶部导航定位到中心?

如何在导航栏的标题项上添加专辑选择器视图

如何将 UIImageView 添加到导航栏的右侧?

在导航栏左侧添加标题

垂直对齐 UINavigationItems

如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?