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

如何为导航控制器添加右侧导航栏按钮并调整其大小与位置

问题描述

如何为导航控制器内的视图控制器添加带图片的右侧导航栏按钮?我尝试了以下代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:31:15