Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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_Uinavigationcontroller_Uinavigationbar_Uinavigationitem - Fatal编程技术网

Ios swift:设置导航栏中的按钮图像

Ios swift:设置导航栏中的按钮图像,ios,swift,uinavigationcontroller,uinavigationbar,uinavigationitem,Ios,Swift,Uinavigationcontroller,Uinavigationbar,Uinavigationitem,我正在尝试在控制器的导航栏中设置后退按钮图像,以下是我在viewDidLoad()中的代码: 我试图将它们放到viewWillLoad,但得到了相同的错误 控制台显示错误消息: <UIImage: 0x7ff37bd85750> GET IT <UIImage: 0x7ff37bd85750> VSC14UIControlState (has 1 child) (Enum Value) fatal error: unexpectedly found nil while u

我正在尝试在控制器的导航栏中设置后退按钮图像,以下是我在viewDidLoad()中的代码:

我试图将它们放到viewWillLoad,但得到了相同的错误

控制台显示错误消息:

<UIImage: 0x7ff37bd85750>
GET IT
<UIImage: 0x7ff37bd85750>
VSC14UIControlState (has 1 child)
(Enum Value)
fatal error: unexpectedly found nil while unwrapping an Optional value

了解了
VSC14uicontrol状态(有1个子项)
(枚举值)
致命错误:在展开可选值时意外发现nil
我不知道哪一部分出了问题。看起来back\u img不是零,但是我得到了一个错误,说它是零


谢谢

我通过查看示例代码找到了答案。 1) 在情节提要中创建条形按钮项。 2) 使用IBOutlet将该按钮链接到控制器 3) 将图像添加到按钮

 var backImg: UIImage = UIImage(named: "back_btn")
 backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

备注:图像应添加到Images.xcsets文件夹,有关详细信息,请参阅示例代码。

如果要更改每个控制器中的“后退”按钮,可以将其添加到didFinishLaunchingWithOptions中的应用程序委派

    let backImg: UIImage = UIImage(named: "back_button")!
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
替代方法:
单击故事板中的导航控制器(而不是UIViewController本身中的导航控制器)。然后,在RHS的属性部分,您将看到背面图像和背面遮罩。设置回图像,您就完成了。

//这是在默认导航栏中设置回图像和操作按钮的完美解决方案

首先在导航栏中添加UIBarButton

然后转到序列图像板中文件检查器中的属性,并添加空间以隐藏后退按钮标题文本

在Ui栏按钮图像中设置图像

/点击写操作方法/

要启用滑动弹出(返回上一个控制器),请在ViewDidLoad方法中写入两行代码

您将获得完美的“后退”按钮和“滑动到后退”动画


//注意:-要禁用后退按钮上一个viewcontroller标题,请在序列图像板文件检查器的后退按钮中的标题文本中添加一个空格

Swift 3.0+中,将代码放在
appdelegate
didFinishLaunchingWithOptions
方法的下面,它将非常有效

    self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon")
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon")
let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)
或适用于Swift 4.0+

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)

最后一行将删除
导航返回按钮的标题
,如果您不想删除标题,则只需删除最后一行

Swift 4+版本

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)

你好,我的图像因为某种原因被拉伸了。图像的大小是多少?由于默认情况下分配给条形图项目的空间,图像会被拉伸。解决这个问题的一种方法是在故事板中选择导航项,并在“后退按钮”文本框中留出一个空格。然后,当您设置图像时,它被限制在剩余的空间内……另一种方法是将UIButton设置为BarButton项。@goggelj,我已经在序列图像板的导航栏->后退按钮中设置了一个空格。但这个形象又被拉长了。你有什么解决办法吗?@mehul,如果导航栏上有一个栏项目(栏内按钮项目),选择它并确保它在'title'@goggelj中也有一个空格,谢谢,但我已经检查过了,谢谢你的解决办法。谢谢。@ChanchalRaj UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0,-60),for:UIBarMetrics.default)这将完成这个技巧请包含代码的可搜索和可选文本,而不是图像。嘿,我尝试了上述解决方案,背景图像保持不变。不确定从这里走到哪里。Tristan如果不工作,请共享您的代码段,并尝试确保您已在解决方案中添加了“返回图标”图像?
let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)