【问题标题】:Insert right button image in UINavigationController with swift 3使用 swift 3 在 UINavigationController 中插入右键图像
【发布时间】:2016-11-24 08:34:40
【问题描述】:

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

以下代码没有给出任何错误,但导航栏中没有显示任何内容。

import UIKit
import Foundation
class UICipNavigationController: UINavigationController {

override func viewDidLoad() {
    super.viewDidLoad()


    // Add BPT LOGO as UIBarButton
    let logoBPT = UIImage(named: "Logo BPT")?.withRenderingMode(.alwaysOriginal)

    let logoBPTBarButton = UIBarButtonItem(image: logoBPT, style: .plain, target: nil, action: nil)
    self.navigationItem.rightBarButtonItem = logoBPTBarButton


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

import UIKit

class UICipNavigationBar: UINavigationBar {

override init(frame: CGRect){
    super.init(frame: frame)

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!

    self.tintColor = UIColor.white

    self.setBackgroundImage(UIImage.fromColor(color: UIColorFromHex(rgbValue: 0xffffff, alpha: 0.2)), for: UIBarMetrics.default)
    self.shadowImage = UIImage()
    self.isTranslucent = true
    self.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont(name: "Lato-Regular", size: 24)!]

}

override func sizeThatFits(_ size: CGSize) -> CGSize {
    let newSize :CGSize = CGSize(width: self.superview!.bounds.size.width, height: 60)
    return newSize
}

}

我也尝试检查视图,但似乎没有添加任何内容:

【问题讨论】:

  • 试试这个 .. 可能对你有用stackoverflow.com/questions/30022780/…
  • 刚试过,但我没有运气。代码总是覆盖情节提要吧?
  • 您的代码运行良好。刚刚经过测试。可能是您的图像文件不存在?我不明白。为什么你的图片文件名中有空格Logo BPT
  • 因为是我给图像集的名称,所以它有空间。除非我需要参考 -image 文件的名称 -。
  • 检查我的更新.....

标签: ios swift xcode swift3 uibarbuttonitem


【解决方案1】:

注意:Image name/file/extention 很敏感。当您设置barButtonImage 时。请确保正确设置它们。我正在评估来自asset catalog(32pt) 的图像文件。

 let myimage = UIImage(named: "YourImageFileName")?.withRenderingMode(.alwaysOriginal)
 navigationItem.rightBarButtonItem = UIBarButtonItem(image: myimage, style: .plain, target: self, action: #selector(ButtonTapped))


 func ButtonTapped() { 
 print("Button Tapped")  
}

输出: updated

方法二Testing Purpose

注意:将您的标题设置为 Xcode 中的表情符号图标。运行项目,看看效果如何?

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "?", style: .plain, target: self, action: #selector(ButtonTapped))

    func ButtonTapped() { 
    print("Button Tapped")  
   }

输出:

【讨论】:

  • 您在没有从情节提要中添加按钮的情况下完成了这一切?
【解决方案2】:

您应该在导航控制器显示的顶视图控制器中设置右栏按钮

【讨论】:

    【解决方案3】:
        let button = UIButton.init(type: .custom)
        button.setImage(UIImage.init(named: "menu"), for: UIControlState.normal)
        button.frame = CGRect.init(x: 0, y: 0, width: 25, height: 17)
        let barButton = UIBarButtonItem.init(customView: button)
        self.navigationItem.rightBarButtonItem = barButton
    

    【讨论】:

    【解决方案4】:

    请参考以下代码。

    let button: UIButton = UIButton (type: UIButtonType.Custom)
    button.setImage(UIImage(named: "emojiImage"), forState: UIControlState.Normal)
    //button.addTarget(self, action: "emojiImageButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside)
    button.frame = CGRectMake(0, 0, 30, 30)
    let barButton = UIBarButtonItem(customView: button)
    
    self.navigationItem.rightBarButtonItem = barButton
    

    确保您的图像必须是纯(透明)背景。

    如果您想要点击事件,请取消注释 button.addTarget(self, action: "emojiImageButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 并在下面的函数中调用。

    func emojiImageButtonPressed(btn : UIButton) {
    
        print("emojiImageButtonPressed")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      相关资源
      最近更新 更多