You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码将UIBarButtonItem图片移至左侧作为菜单按钮

嗨,这个问题我太熟悉啦!要把UIBarButtonItem的图片从导航栏中央移到左侧当菜单按钮,其实iOS的导航栏框架本身就提供了现成的位置属性,分几种场景给你讲明白:

1. 基础实现:直接用图片创建左侧菜单按钮

如果只是需要一张图片作为左侧菜单按钮,最简单的方式就是创建UIBarButtonItem时指定图片,然后把它赋值给当前ViewController的navigationItem.leftBarButtonItem——这个属性就是专门用来设置导航栏左侧按钮的,完全不会跑到中央去。

Swift 代码示例:

// 加载图片(如果是Assets里的资源,直接传名字就行)
// 加上withRenderingMode是为了保持图片原本的颜色,避免被导航栏的tintColor覆盖
let menuImage = UIImage(named: "menu_icon")?.withRenderingMode(.alwaysOriginal)
// 创建按钮,绑定点击事件
let menuBarButton = UIBarButtonItem(image: menuImage, style: .plain, target: self, action: #selector(menuButtonTapped))

// 关键一步:把按钮赋值给左侧位置
navigationItem.leftBarButtonItem = menuBarButton

// 按钮点击的处理逻辑
@objc func menuButtonTapped() {
    // 这里写你的菜单弹出逻辑,比如侧滑菜单展开
    print("菜单按钮被点击啦!")
}

Objective-C 代码示例:

// 加载图片并设置渲染模式,避免颜色被覆盖
UIImage *menuImage = [[UIImage imageNamed:@"menu_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// 创建按钮并绑定事件
UIBarButtonItem *menuBarButton = [[UIBarButtonItem alloc] initWithImage:menuImage style:UIBarButtonItemStylePlain target:self action:@selector(menuButtonTapped)];

// 赋值给左侧按钮位置
self.navigationItem.leftBarButtonItem = menuBarButton;

// 点击事件处理
- (void)menuButtonTapped {
    NSLog(@"菜单按钮被点击啦!");
}
2. 自定义按钮(调整图片位置/添加额外样式)

如果默认的图片位置太靠边或者太挤,你可以先自定义一个UIButton,调整好样式和内边距后,再把它包装成UIBarButtonItem:

Swift 代码示例:

let customMenuButton = UIButton(type: .system)
// 设置图片
customMenuButton.setImage(UIImage(named: "menu_icon")?.withRenderingMode(.alwaysOriginal), for: .normal)
// 设置按钮大小
customMenuButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
// 绑定点击事件
customMenuButton.addTarget(self, action: #selector(menuButtonTapped), for: .touchUpInside)
// 调整图片内边距,避免贴在屏幕左边缘
customMenuButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: -10, bottom: 0, right: 10)

// 把自定义按钮包装成UIBarButtonItem
let menuBarButton = UIBarButtonItem(customView: customMenuButton)
navigationItem.leftBarButtonItem = menuBarButton
3. 几个关键注意事项
  • 一定要给图片设置withRenderingMode(.alwaysOriginal),不然导航栏的全局tintColor会把你的图片颜色覆盖,变成和导航栏一样的色调,菜单图标可能就不显眼了。
  • 你的ViewController必须是嵌入在UINavigationController里面的,才能直接使用navigationItem属性;如果没有导航控制器,记得先给ViewController套一个UINavigationController。
  • 如果需要左侧放多个按钮,可以用navigationItem.leftBarButtonItems(复数形式)传入一个UIBarButtonItem数组,按钮会从左到右依次排列。

内容的提问来源于stack exchange,提问作者Aditya Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:22:12