如何以编程方式插入右键图像UINavigationbar swift 3

Posted

技术标签:

【中文标题】如何以编程方式插入右键图像UINavigationbar swift 3【英文标题】:how to inserted right button image programmatically UINavigation bar swift3 【发布时间】:2018-01-18 07:54:33 【问题描述】:

我正在尝试使用静态图像以编程方式覆盖导航项的 rightButton

这样的按钮:

我已经尝试了很多时间来解决它,但没有得到正确的答案。

谁能帮我做到这一点?

【问题讨论】:

如果你将一个视图控制器从一个推到另一个。该左栏按钮图像显示为默认值。您需要以编程方式设置左栏按钮并为栏按钮设置图像以解决此问题。 @NitinGohel left != right ;) 请显示您尝试过的代码。 如图所示,他在询问左栏按钮。如果该图像设置来自情节提要,那么他可以轻松设置和替换为 xib 或情节提要。 我已经以编程方式创建了右栏按钮并为栏按钮设置了图像,但图像对齐和 x 和 y 设置不正确 - nitin Gohel 【参考方案1】:

可能的解决方案。您可以创建 UIBarButton 项目的扩展。 示例:

import UIKit

    extension UIBarButtonItem 

        convenience init (image: UIImage?, target: Any?, action: Selector?) 
            let button = UIButton(type: .custom)
            button.imageView?.contentMode = .scaleAspectFit
            button.frame = CGRect(x: 0.0, y: 0.0, width: 44.0, height: 44.0)
            button.addTarget(target, action: action!, for: .touchUpInside)
            button.setImage(image, for: UIControlState.normal)
            button.imageEdgeInsets = UIEdgeInsets(top: 7.0, left: 7.0, bottom: 7.0, right: 7.0)

            if #available(ios 9.0, *) 
                button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true
                button.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
            
            self.init(customView: button)
        
    

然后在你的 viewDidLoad 方法中使用它:

let rightButton = UIBarButtonItem(image: UIImage(named: "example"), target: self, action: #selector(exampleAction(sender:)))
self.navigationItem.rightBarButtonItem = rightButton

【讨论】:

每当我在上面使用你的代码但不起作用时,我都会创建 UIBar RightButton insite viewWillApear 方法 您应该只在 viewDidLoad 中执行一次。问题是什么?按钮不可见? 您确定该图像的名称正确吗?你能展示你的代码吗? 告诉我一件事我可以用什么替换 #selector(exampleAction(sender:))) ?? 是的,当然,你应该把这个按钮的操作方法放在那里。【参考方案2】:

可以使用现有的UIBarButtonItem方便init方法:

convenience init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)

style = .plain(无边框)。

见https://developer.apple.com/documentation/uikit/uibarbuttonitem/1617163-init

然后,当你的 UIViewController 位于导航堆栈的顶部时,通知你的 UINavigationController 显示你的按钮,设置你的视图控制器的 navigationItem.rightBarButtonItems 属性:

(myViewController.navigationItem.rightBarButtonItems = [<your items>]

【讨论】:

以上是关于如何以编程方式插入右键图像UINavigationbar swift 3的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 uicollectionview 中插入图像?

如何设置 UINavigation 大小以适合背景图像大小?

如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?

如何以编程方式完成作业后停止cron作业

以编程方式调用浏览器右键单击菜单选项?

以编程方式将图像添加到Word文档