[英]Embedded Navigation bar disappears on iOS 7 (small screen size) but not iOS 9 (larger screen) after performing segue
我有一个名为showPage
的show segue,从视图控制器到表视图控制器,我调用performSegueWithIdentifier()
使其在警报按钮上单击OK后显示:
@IBAction func enterManuallyTap(sender: AnyObject) {
var code : String!
if #available(iOS 8.0, *) {
let alert = UIAlertController(title: "Enter code", message: "Please enter code", preferredStyle: UIAlertControllerStyle.Alert)
alert.addTextFieldWithConfigurationHandler({ (input:UITextField) in
input.placeholder = "your code"
});
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (_) in
barcode = alert.textFields!.first?.text
self.performSegueWithIdentifier("showPage", sender: self)
}))
presentViewController(alert, animated: true, completion: nil)
} else {
let alert = UIAlertView(title: "Enter code", message: "Please enter code", delegate: self, cancelButtonTitle: "Cancel", otherButtonTitles: "OK")
alert.alertViewStyle = UIAlertViewStyle.PlainTextInput
alert.show()
}
}
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
if buttonIndex == 1 {
var code : String!
code = alertView.textFieldAtIndex(0)?.text
self.performSegueWithIdentifier("showPage", sender: self)
}
}
这一切都在我的iOS 9设备上完美运行,但是当我在iOS 7设备上试用时,导航栏消失了,所以我看不到标题或点击“返回”。 因此,表格视图从屏幕的最顶部开始,并进入状态栏。
我尝试将顶部栏从inferred
更改为Translucent Navigation Bar
并将nagivationBarHidden
设置为false
self.navigationController?.navigationBarHidden = false
但它仍然没有出现在iOS 7上。
我只是在tableviewcontroller的viewDidAppear()
尝试print(self.navigationController)
,在我的iOS 7设备上,它打印nil
,但是在我的iOS 9设备上,它显示了控制器: Optional(<UINavigationController: 0x12504e600>)
! 为什么它不存在于旧设备上? 我已经看到如果你有一个模态segue导航控制器将不存在,但我正在做一个正常的show segue,我无法理解为什么它应该在一个设备上工作但不能在另一个设备上工作。
为什么会发生这种情况,为什么只在iOS 7(或更小尺寸的设备)上呢?
这可能是因为我使用的iOS 9设备有更大的屏幕吗? (这是iPhone 6S)但iOS 7设备是iPhone 4,它有一个较小的屏幕。 我该如何调试这个以检查它是否是屏幕尺寸的问题? 但是,在任何一个设备上,segue所用的表视图控制器中的任何一个单元都不会以任何方式被切断。
我的故事板(点击查看大图):
有问题的segue是'Scan'视图控制器和选择扫描视图控制器之间的segue。
我认为问题在于你的showSegue
( showPage
)
显示(推送)
此segue使用目标视图控制器的showViewController:sender:方法显示新内容。 对于大多数视图控制器,此segue在源视图控制器上以模态方式呈现新内容。 某些视图控制器专门覆盖该方法并使用它来实现不同的行为。 例如,导航控制器将新视图控制器推送到其导航堆栈。
确保您的第一个viewController
嵌入到Storyboard
的UINavigationController
中。 使navigationController
initialViewController
如果你的第一个viewController
是initialViewController
。 否则它可以以modally
呈现新的viewController
。 这意味着在新的viewController
之上没有navigationBar
。 我认为这是在你的情况下发生的。
您也可以尝试删除并重新创建一个新的segue。 看到这个:
Xcode 6中的“显示”segue将视图控件呈现为iOS 7中的模态
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.