在Swift 3中更改UIBarButtonItem(image)的大小

Sol*_*ole 15 xcode ios swift3

我试图改变我的navBar中某些图标的大小,但我对如何做到这一点感到有点困惑?到目前为止我的代码是:

func setUpNavBarButtons() {
    let moreButton = UIBarButtonItem (image: UIImage(named:"ic_more_vert_3")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleMore))
    navigationItem.rightBarButtonItems = [moreButton]
    let refreshButton = UIBarButtonItem (image: UIImage(named:"ic_refresh")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(refreshDataButton))
    navigationItem.leftBarButtonItems = [refreshButton]
}
Run Code Online (Sandbox Code Playgroud)

任何帮助?

ano*_*eal 80

这就是我做到的

iOS 10及以下版本

func setUpMenuButton(){
    let menuBtn = UIButton(type: .custom)
    menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 20, height: 20)
    menuBtn.setImage(UIImage(named:"menuIcon"), for: .normal)
    menuBtn.addTarget(self, action: #selector(vc.onMenuButtonPressed(_:)), for: UIControlEvents.touchUpInside)

    let menuBarItem = UIBarButtonItem(customView: menuBtn)
    self.navigationItem.leftBarButtonItem = menuBarItem
}
Run Code Online (Sandbox Code Playgroud)

iOS 11 - 导航栏提出了Autolayout,因此框架设置可能无法正常工作

func setUpMenuButton(){
    let menuBtn = UIButton(type: .custom)
    menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 20, height: 20)
    menuBtn.setImage(UIImage(named:"menuIcon"), for: .normal)
    menuBtn.addTarget(self, action: #selector(vc.onMenuButtonPressed(_:)), for: UIControlEvents.touchUpInside)

    let menuBarItem = UIBarButtonItem(customView: menuBtn)
    let currWidth = menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 24)
    currWidth?.isActive = true
    let currHeight = menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 24)
    currHeight?.isActive = true
    self.navigationItem.leftBarButtonItem = menuBarItem
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为正确的答案,它是唯一一个处理iOS 11的人. (9认同)

Dog*_*fee 16

Swift 4.2的扩展

只是另一种实现方式,anoop4real提供了答案

但是,使用按钮类型.system可以将全局色调应用于您的图标

用法:

navigationItem.leftBarButtonItem = UIBarButtonItem.menuButton(self, action: #selector(presentSettings), imageName: "settings")
Run Code Online (Sandbox Code Playgroud)

实现方式:

extension UIBarButtonItem {

    static func menuButton(_ target: Any?, action: Selector, imageName: String) -> UIBarButtonItem {
        let button = UIButton(type: .system)
        button.setImage(UIImage(named: imageName), for: .normal)
        button.addTarget(target, action: action, for: .touchUpInside)

        let menuBarItem = UIBarButtonItem(customView: button)
        menuBarItem.customView?.translatesAutoresizingMaskIntoConstraints = false
        menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 24).isActive = true
        menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 24).isActive = true

        return menuBarItem
    }
}
Run Code Online (Sandbox Code Playgroud)


jok*_*man 6

您可以如下配置按钮的框架:

let icon = UIImage(named: "imageName")
let iconSize = CGRect(origin: CGPoint.zero, size: CGSize(width: 50, height: 50))
let iconButton = UIButton(frame: iconSize)
iconButton.setBackgroundImage(icon, for: .normal)
let barButton = UIBarButtonItem(customView: iconButton)
iconButton.addTarget(self, action: #selector(foo), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)

  • @FedeHenze您需要创建像这样的“icon”“UIImage(named:“imageName”)?.withRenderingMode(.alwaysTemplate)`。然后你就可以设置它的色调。有关更多信息,请参阅[此](/sf/ask/3708698661/#52981720)。 (2认同)

Sol*_*ole 5

最后我这样做了并且成功了:

let moreButton = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
moreButton.setBackgroundImage(UIImage(named: "ic_more_vert_3"), for: .normal)
moreButton.addTarget(self, action: #selector(TableViewController.handleMore), for: .touchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: moreButton)
Run Code Online (Sandbox Code Playgroud)

答案来自:Change width of a UIBarButtonItem in a UINavigationBar in swift


val*_*ine 5

@DogCoffee 的答案是解决问题的绝佳且富有创意的方法。我可以建议一些稍微修改一下以考虑尺寸和色调吗

extension UIBarButtonItem {

    static func menuButton(_ target: Any?,
                           action: Selector,
                           imageName: String,
                           size:CGSize = CGSize(width: 32, height: 32),
                           tintColor:UIColor?) -> UIBarButtonItem
    {
        let button = UIButton(type: .system)
        button.tintColor = tintColor
        button.setImage(UIImage(named: imageName), for: .normal)
        button.addTarget(target, action: action, for: .touchUpInside)

        let menuBarItem = UIBarButtonItem(customView: button)
        menuBarItem.customView?.translatesAutoresizingMaskIntoConstraints = false
        menuBarItem.customView?.heightAnchor.constraint(equalToConstant: size.height).isActive = true
        menuBarItem.customView?.widthAnchor.constraint(equalToConstant: size.width).isActive = true

        return menuBarItem
    }
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*ZHB 5

如果您使用的是 iOS 13 中提供的 SF 符号图像,您可以设置 SF 符号图像配置。

let config = UIImage.SymbolConfiguration(pointSize: 30, weight: .light, scale: .default)

let image = UIImage(systemName: "plus.circle", withConfiguration: config)

Run Code Online (Sandbox Code Playgroud)