Swift 4:在IB中设置类导航控制器返回按钮样式的下一步按钮
嘿,我完全懂你的困惑——之前确实有不少开发者误以为Interface Builder里有现成的、和返回按钮样式完全匹配的「下一步」预设按钮,但其实苹果并没有提供这个默认控件。不过别担心,不管是用IB可视化配置,还是写代码实现,都能做出和返回按钮风格高度一致的自定义按钮,下面给你详细说两种方案:
用Interface Builder实现的步骤
- 先拖一个
UIButton到导航栏的右侧(或者你需要放置的位置) - 调整按钮样式来匹配返回按钮:
- 把按钮的Type改成「Custom」,这样才能自由搭配图标和文字
- 图标可以用系统的SF Symbol里的「chevron.right」,和返回按钮的「chevron.left」正好对应,视觉上统一
- 调整文字和图标的间距:在IB的「Control」面板里找到「Content Insets」和「Image Insets」,参考系统返回按钮的间距来微调,确保整体排版协调
- 文字样式匹配:把按钮的字体设置成和导航栏返回按钮一致的系统字体(一般是17号、medium权重),颜色用导航栏的
tintColor,保证色调统一 - 别忘了开启「Highlighted Adjusts Image」选项,让按钮点击时的反馈和返回按钮一样
用代码实现的灵活方案
如果需要动态调整样式,或者想在多个页面复用这个按钮样式,代码实现会更方便:
// 创建自定义按钮 let nextButton = UIButton(type: .custom) // 设置匹配的图标(使用SF Symbol,开启模板模式保证颜色随tint变化) let nextIcon = UIImage(systemName: "chevron.right")?.withRenderingMode(.alwaysTemplate) nextButton.setImage(nextIcon, for: .normal) // 设置按钮文字 nextButton.setTitle("下一步", for: .normal) // 调整图标与文字的间距,和返回按钮对齐 nextButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 8) nextButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 0) // 匹配系统返回按钮的样式 nextButton.tintColor = navigationController?.navigationBar.tintColor nextButton.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium) // 添加点击事件 nextButton.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside) // 将按钮设置为导航栏右侧按钮 navigationItem.rightBarButtonItem = UIBarButtonItem(customView: nextButton) // 点击事件处理 @objc private func nextButtonTapped() { // 这里写你的下一步逻辑 }
补充一句:苹果没做预设的下一步按钮,是因为返回按钮和导航栈的返回行为强绑定,而下一步属于自定义业务行为,所以需要我们手动对齐样式。只要抓住图标风格、字体、颜色、间距这几个关键点,做出和返回按钮一模一样的视觉效果完全没问题。
内容的提问来源于stack exchange,提问作者Brewski
相关产品推荐
相关产品推荐

