Ios 模拟器iPhone X系列-使用所有按钮将无法识别的选择器发送到实例
我使用的是Xcode 10.1,模拟器也是10.1版,但去年的前一个版本也是如此。我没有为此烦恼,因为我正在构建基本的ui和后端,所以跳过了它。现在我几乎准备好发布了,现在我需要在X系列上进行测试 每当我使用5S-8+中的任何其他常规模拟器iPhone时,都没有问题,一切正常,我触摸一个按钮,动作就会发生。我有一部iPhone 7+,使用实际的设备,按钮工作正常 但是,每当我使用模拟器并在触摸any视图控制器中的any按钮时选择任何iPhone X系列设备时,我总是会崩溃 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\u UIBackButtonContainerView标题标签]:未识别的选择器已发送到实例0x7fdd99c759e0' 无论是什么原因导致X系列出现问题Ios 模拟器iPhone X系列-使用所有按钮将无法识别的选择器发送到实例,ios,swift,xcode,uibutton,Ios,Swift,Xcode,Uibutton,我使用的是Xcode 10.1,模拟器也是10.1版,但去年的前一个版本也是如此。我没有为此烦恼,因为我正在构建基本的ui和后端,所以跳过了它。现在我几乎准备好发布了,现在我需要在X系列上进行测试 每当我使用5S-8+中的任何其他常规模拟器iPhone时,都没有问题,一切正常,我触摸一个按钮,动作就会发生。我有一部iPhone 7+,使用实际的设备,按钮工作正常 但是,每当我使用模拟器并在触摸any视图控制器中的any按钮时选择任何iPhone X系列设备时,我总是会崩溃 由于未捕获的异常“NS
[\u UIBackButtonContainerView标题标签]
我正在调试模式下运行Xcode:
可能是什么问题?
代码-
下面是按钮的图片,操作中只有一条打印语句:
以下是坠机的照片:
我通过@matt在评论中的评论缩小了缺陷,他说
我很难理解您显示的任何代码可能与UIBackButtonContainerView有什么关系。在我看来,我们希望看到的是您的后退按钮,而不是这个登录按钮
。当他说我查看了代码的其他部分时
这个LoginVC的问题是根vc
,我没有任何barButtonItem,但是我用下面这行代码隐藏了vc中backBarButton
项中的文本,该项被推上,因此它只会显示一个返回箭头
这在正在推送的父vc中:
// LoginVC with loginButton inside of it
navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: .plain, target: nil, action: nil)
这是在被推上的子vc中:
// child vc that’s getting pushed on
if view.frame.width == 414 && view.frame.height == 896 || view.frame.width == 375 && view.frame.height == 812 {
navigationController?.navigationBar.prefersLargeTitles = true
} else {
navigationController?.navigationBar.prefersLargeTitles = false
}
我不知道为什么我可以在iPhone5、6、7和8系列上使用它,而在X系列上却没有问题。当我把这个评论出来时,它起了作用
为了让它工作并在下一个vc中仍然隐藏文本,我必须将代码更改为:
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
区别在于标题:
参数
当它不工作时,我将参数设置为nil
为了让它工作,我将它设置为空引号:“”
很奇怪的问题
更新进一步检查后,问题与
navigationController?.navigationBar.prefersLargeTitles = true
似乎无法使用上述代码并将backBarButton标题设置为nil。我猜苹果公司想确保在使用大型导航栏标题时有某种文本。添加一点更新。似乎prefersLargeTitles
和navigationItem.backBarButtonim=uiBarButtonim(title:nil,style:plain,target:nil,action:nil)的组合会在某些iOS版本上导致崩溃
从一些测试来看,它似乎是在iOS 14上安装的,但苹果也添加了一个新的API,以在iOS 14上实现同样的功能,它不需要更新BackbarButtonim
简而言之,要实现nil
标题,同时仍允许长按手势在iOS 14及更高版本上显示历史记录,您需要添加一些条件逻辑
我们可以利用iOS 14的更干净的API来实现这一点。
backButtonDisplayMode=.minimal
不要使用标题,只使用后退按钮指示器图像
private func hideBackButtonTitle(用于viewController:UIViewController){
如果可用(iOS 14.0,*){
viewController.navigationItem.backButtonDisplayMode=.minimal
}否则{
//版本
谢谢兰斯,如果没有你的回答,我永远也找不到解决方案。这是最模糊的错误,苹果可以通过显示准确的错误信息做得更好。np,必须提前支付。这是一个非常令人沮丧的错误,错误消息是无用的。很高兴能帮忙。干杯根据Xcode 11.4.1进行确认。当“大标题”处于启用状态,并按下带有“nil back”按钮的视图控制器(位于navigationItem上)时,会发生所述致命错误。
navigationController?.navigationBar.prefersLargeTitles = true
private func hideBackButtonTitle(for viewController: UIViewController) {
if #available(iOS 14.0, *) {
viewController.navigationItem.backButtonDisplayMode = .minimal
} else {
// Versions < iOS 13 crash when using `prefersLargeTitle` and backButton with a `nil` title.
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(
title: "",
style: .plain,
target: nil,
action: nil
)
}
}