Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中自定义导航后退按钮?_Ios_Swift_Uinavigationbar - Fatal编程技术网

Ios 如何在swift中自定义导航后退按钮?

Ios 如何在swift中自定义导航后退按钮?,ios,swift,uinavigationbar,Ios,Swift,Uinavigationbar,我想更改导航栏上的后退按钮图标、标签和后退按钮标签的颜色。我已经写了以下代码,但没有工作。如果有人知道soloution,请帮帮我 override func viewDidLoad() { super.viewDidLoad() let yourBackImage = UIImage(named: "back_arrow") self.navigationController?.navigationBar.b

我想更改导航栏上的后退按钮图标、标签和后退按钮标签的颜色。我已经写了以下代码,但没有工作。如果有人知道soloution,请帮帮我

override func viewDidLoad() {
        super.viewDidLoad()
        
        let yourBackImage = UIImage(named: "back_arrow")
        self.navigationController?.navigationBar.backIndicatorImage = yourBackImage
        self.navigationController?.navigationBar.tintColor = .white
        self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Find or Invite", style: UIBarButtonItem.Style.plain, target: nil, action: nil)
        
        
    }
预期产量

看起来您在没有嵌入式导航控制器的情况下手动添加了导航栏

为此,只需像这样连接插座

   @IBOutlet weak var navigationBar: UINavigationBar!
并从代码中删除导航控制器部分,如下所示

let yourBackImage = UIImage(named: "back_arrow")
        self.navigationBar.backIndicatorImage = yourBackImage
        self.navigationBar.tintColor = .white
        self.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Find or Invite", style: UIBarButtonItem.Style.plain, target: nil, action: nil)
试试这个: 在viewDidLoad中声明按钮、图像和标题

let button = UIButton(type: .custom)
    //Set the image
    button.setImage(UIImage(systemName: "chevron.backward"), for: .normal)
    //Set the title
    button.setTitle("Yourtitle", for: .normal)
    //Add target
    button.addTarget(self, action: #selector(callMethod), for: .touchUpInside)
    button.frame = CGRect(x: 0, y: 0, width: 100, height: 30)
    button.sizeToFit()
现在设置图像和标题之间的间距:

let spacing:CGFloat = 10.0; // the amount of spacing to appear between image and title
    button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: spacing)
    button.titleEdgeInsets = UIEdgeInsets(top: 0, left: spacing, bottom: 0, right: 0)
之后,创建导航栏按钮并添加到导航栏:

let barButton = UIBarButtonItem(customView: button)
    navigationItem.leftBarButtonItem = barButton
结果是:

奖金:
如果您想在一行中正确设置导航栏,请查看此处的扩展名

我在导航栏按钮项中添加了后退按钮和标题。我已经为使用这两种方法制作了动态函数

此代码为后退按钮,它将返回UIBarButtonItem项

    func getBackButton(selector: Selector, target: Any) -> UIBarButtonItem {
    
    let button = UIButton(type: .custom)
    button.setImage(UIImage(named: "img_back_white"), for: .normal)
    button.setImage(UIImage(named: "img_back_white"), for: .highlighted)
    button.setImage(UIImage(named: "img_back_white"), for: .selected)
    button.imageView?.contentMode = .scaleAspectFit
    button.imageEdgeInsets = UIEdgeInsets(top: 0, left: -15, bottom: 0, right: 0)
    button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    //button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: 0, bottom: 0, right: 0)
    button.backgroundColor = .clear
    button.addTarget(target, action: selector, for: .touchUpInside)
    
    return UIBarButtonItem(customView: button)
}
现在添加标题旁边的后退按钮

func getNavigationTitleButton(title: String, font: UIFont = UIFont.SFProDisplayRegular(size: 19)) -> UIBarButtonItem {
    let navTitle = UILabel()
    navTitle.text = title
    navTitle.textColor = .AppWhite
    navTitle.isEnabled = true
    navTitle.font = font
    //navTitle.backgroundColor = .red
    //navTitle.frame.origin.x = -40
    //navTitle.sizeToFit()
    return UIBarButtonItem(customView: navTitle)
}
您可以根据需要定制。我想再添加一个方法,如果您想在某些屏幕上直接显示这两个方法,那么请使用带有title和selector参数的方法

func addBackWithTitle(title: String, selector: Selector) {
    self.navigationItem.leftBarButtonItems = [self.getBackButton(selector: selector, target: self), self.getNavigationTitleButton(title: title)]
}

提示:Backbarbuttonimbut什么都没用提示2:UIBarbuttonimca你能检查一下我的设计吗我想我是在半睡半醒。很抱歉。。。尝试在
viewwillbeen
viewdidebeen
中执行此操作。实际上,我已将我的控制器嵌入Storyboard中的导航控制器中。标题未显示:(@AbhayjeetSingh在我的项目中正确显示,尝试打开新项目,以编程方式配置导航栏和导航控制器,如下所示:,复制并粘贴viewDidLoad中按钮的代码,然后告诉我……使用上述代码,标题(Yortitle)太大,并显示在下一个屏幕上line@AbhayjeetSingh尝试添加:button.sizeToFit()