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

时间:2015-01-29 10:52:31

标签: ios image navigationbar

我正在IOS中开发,我使用以下代码为navigationBar设置背景。

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

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

enter image description here

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

提前致谢。

8 个答案:

答案 0 :(得分:33)

设置导航标题视图如下

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;

答案 1 :(得分:6)

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

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

输出:

enter image description here

答案 2 :(得分:2)

这里要提到的一件事是为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;

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

在WWDC Session 204中,更新了iOS 11的应用程序,声明UIToolBar和UINavigationBar已升级为使用自动布局,为了避免零大小的自定义视图,您应该了解一些相关信息。

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

或将宽高比模式设置为aspectFit

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

如果您想观看会话,Session 204

答案 5 :(得分:0)

试试这个:

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

答案 6 :(得分:0)

UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;

答案 7 :(得分:0)

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

写下以下功能:

select Right('0'+cast(DATEPART(mm,datecol) as varchar(2)),2) +
       Right('0'+cast(DATEPART(yy,datecol)%100 as varchar(2)),2) MonthYearPart
from MyTable

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

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

}

祝你好运