如何在导航栏中放置 UIImage 使其成为徽标?

Posted

技术标签:

【中文标题】如何在导航栏中放置 UIImage 使其成为徽标?【英文标题】:How to place a UIImage in Navigationbar such that its a logo? 【发布时间】:2014-05-27 05:40:01 【问题描述】:

我想在NavigationBar的左侧放置一个标志/图像。我在代码中尝试了这个,但它不能正常工作。

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

我尝试先放置视图,然后将图像放置为 UIImageView,但对齐不好。而且在运行代码时视图似乎是空白。..

【问题讨论】:

你用过故事板 是的,我在故事板中工作,ios7。 使用以下代码代替最后一行:self.navigationItem.titleView = imageView; stii 对答案不满意?那我来回答。 @Nirav : 发表你的答案......即使我在科威特作为 iOS 开发人员工作...... 【参考方案1】:

Bar Button Item插入左侧的Viewcontroller,并将图片插入Bar item查看图片

【讨论】:

你需要任何修改 效果很好。但它显示为条形按钮项目,即整个图像显示为蓝色。 在你的问题中是在导航栏的左侧设置图像,这就是我给它的,你需要以编程方式添加图像 你需要添加没有导航栏 将色调和插图调整为您喜欢的任何颜色/尺寸【参考方案2】:

我在上一个项目中遇到了同样的问题,你可以创建一个尺寸等于 500*88 像素的新 logo.png,让你的 logo 在它的左侧。填充来自 png 其余部分的透明颜色。

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logoName_500.png"]];
[titleImageView setFrame:CGRectMake(0, 0, 250, 44)];
self.navigationItem.titleView = titleImageView;

希望这有帮助。

【讨论】:

【参考方案3】:

试试这样:

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

还要确保 UIImage 不是 nil 并且它确实有一个有效的图像。

【讨论】:

它与您的代码有点不同。我确实看过。你检查 UIImage 不是 nil 吗?【参考方案4】:

我通常做的是

1. Hide Navigation Bar
   [self.navigationController setNavigationBarHidden:YES animated:NO];

2. Use image of size 640 x 88 & 320 x 44
   UIImage *navigationImage = [UIImage imageNamed:@"navigationImage.png"];

3. Use this image in Imageview at frame CGRectMake(0,0,320,44)
   UIImageView *navImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,44)];
   navImageView.image = navigationImage;
   [self.view addSubview:navImageView];

【讨论】:

我使用导航控制器,需要显示带有 bg 图像的导航栏,我需要将我的徽标放在左侧。 我无法上传快照。 @yazh : 你能发布代码你有导航栏的背景图片吗?我会说在 Dropbox 上发布您的示例代码...【参考方案5】:

我认为这是图像渲染模式的问题。你可以试试下面的代码

    UIImage *logo = [[UIImage imageNamed:@"logo"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:logo style:UIBarButtonItemStylePlain target:self action:nil];
    self.navigationItem.leftBarButtonItem = item;

您甚至可以通过设置UIImageRenderingModeAlwaysOriginal 来尝试使用您当前的代码。

【讨论】:

【参考方案6】:
@property(nonatomic,strong) UIView *titleImageView;


- (UIView *)titleImageView 
if (!_titleImageView) 
     CGFloat width = self.view.frame.size.width;
    _titleImageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)];
    [self.titleLabelView setBackgroundColor:[UIColor clearColor]];
    UIImage *img = [UIImage imageNamed:@"myImg"];
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
    CGRect imageViewRect = imgView.frame;
    /*
    //adjust image position if you need
    imageViewRect.x = 10;
    imageViewRect.y = 3;
    imageView.frame = imageViewRect;
    */
    [_titleLabelView addSubview:imgView];
 
return _titleLabelView;



self.navigationItem.titleView = self.titleLabelView;

【讨论】:

【参考方案7】:
UIBarButtonItem *logoItem1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:nil];
UIBarButtonItem *logoItem2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItem target:self action:nil];

NSArray *actionButtonItems = @[logoItem1, logoItem2];
self.navigationItem.rightBarButtonItems = actionButtonItems;

【讨论】:

【参考方案8】:

我已经尝试并得到了以下解决方案,

func addIconToNavigationBar()
    let logoContainer = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 30))

    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    imageView.contentMode = .scaleAspectFit
    let image = UIImage(named: "FlashScreenTitle")
    imageView.image = image
    logoContainer.addSubview(imageView)
    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: logoContainer)

在上述解决方案中,我创建了一个 UIView 并在该视图中添加了 ImageView。然后使用我的 UIView 创建自定义 BarButtonItem 并将其分配给 leftBarButtonItem。

记得在viewDidLoad()方法中调用addIconToNavigationBar()方法

【讨论】:

以上是关于如何在导航栏中放置 UIImage 使其成为徽标?的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 iMessage 群聊中一样在导航栏中放置集合视图

Tailwind:如何在导航栏父 div 中放置图像

带有UIImage标题的导航栏

在导航栏中放置一个基于自定义视图的 UIBarButtonItem 而没有默认的水平填充

如何将图像放在后面而不使其成为背景图像?

导航栏中间有徽标[复制]