如何为导航控制器添加右侧导航栏按钮并调整其大小与位置
问题描述
如何为导航控制器内的视图控制器添加带图片的右侧导航栏按钮?我尝试了以下代码:
let image = UIImage(named: "save") // Use your custom image or SF Symbols let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(addToLibraryTapped)) navigationItem.rightBarButtonItem = button
但实现效果中按钮尺寸偏大,且未靠最右侧显示,需要调整这两个问题。
解决方案
1. 缩小导航栏按钮尺寸
UIBarButtonItem默认会放大图片,可通过两种方式调整:
- 自定义图片内边距:
let image = UIImage(named: "save")?.withRenderingMode(.alwaysOriginal) let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(addToLibraryTapped)) // 设置内边距压缩显示大小,数值可按需调整 button.imageInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8) navigationItem.rightBarButtonItem = button - 若使用SF Symbols,直接指定符号配置:
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 16, weight: .medium) let image = UIImage(systemName: "square.and.arrow.down", withConfiguration: symbolConfig) let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(addToLibraryTapped)) navigationItem.rightBarButtonItem = button
2. 让按钮紧贴导航栏右侧
导航栏默认会给右侧按钮预留边距,通过自定义UIButton作为UIBarButtonItem的自定义视图,可消除边距:
let customButton = UIButton(type: .system) customButton.setImage(UIImage(named: "save")?.withRenderingMode(.alwaysOriginal), for: .normal) customButton.addTarget(self, action: #selector(addToLibraryTapped), for: .touchUpInside) // 自定义按钮尺寸,控制显示大小 customButton.frame = CGRect(x: 0, y: 0, width: 24, height: 24) let barButton = UIBarButtonItem(customView: customButton) navigationItem.rightBarButtonItem = barButton
这种方式能完全控制按钮位置,使其紧贴导航栏右侧边缘。
内容的提问来源于stack exchange,提问作者Chris Hansen
相关产品推荐
相关产品推荐

