2017-01-05 11 views
4

У меня есть шоу segue под названием showPage от контроллера вида до контроллера табличного представления, и я звоню performSegueWithIdentifier(), чтобы получить его показать после нажатия OK на кнопке в боевой готовности:Встроенная панель навигации исчезает на iOS 7 (размер небольшого экрана), но не iOS 9 (более крупный экран) после выполнения segue

@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) 
    } 
} 

Это все прекрасно работает на моей прошивке 9 устройства, но когда я пытаюсь его на IOS 7 устройства, навигационная панель исчезает, так что я не могу видеть название или нажмите «назад». Поэтому представление таблицы начинается в самой верхней части экрана и переходит в строку состояния.

Я попытался изменить верхнюю панель от inferred до Translucent Navigation Bar и установить nagivationBarHidden ложного

self.navigationController?.navigationBarHidden = false 

, но он по-прежнему не появляется на прошивке 7.

Я просто попытался print(self.navigationController) в viewDidAppear() для tableviewcontroller и на моем устройстве iOS 7, он печатает nil, но на моем устройстве iOS 9 отображается контроллер: Optional(<UINavigationController: 0x12504e600>)! Почему он не существует на более старом устройстве? Я видел, что навигационный контроллер не будет существовать, если у вас модальный сеанс, но я делаю обычный сеанс шоу, и я не понимаю, почему он должен работать на одном устройстве, но не в другом.

Почему это происходит, и почему только на iOS 7 (или устройстве меньшего размера)?

Возможно, это связано с тем, что устройство iOS 9, которое я использую, имеет больший экран? (Это iPhone 6S), но iOS 7 - это iPhone 4, который имеет меньший экран. Как я могу отлаживать это, чтобы проверить, зависит ли это размер экрана? Однако ни одна из ячеек в контроллере табличного представления, к которой идет переход, не обрезается ни на одном из устройств.

Мой раскадровки (нажмите для увеличения изображения):

enter image description here

Проблемный переход является один между контроллером просмотра «Scan» и выберите сканирования контроллера представления.

+0

Вы можете добавить свой снимок экрана своей раскадровки? –

+0

@MihaiFratu конечно, я отредактировал его в вопросе –

+0

Он также может быть связан с моим PageViewController, но все еще не имеет смысла, почему он работает на одном устройстве:/ –

ответ

2

Я думаю, что проблема с showSegue (showPage)

From apple developer

Показать (Push)

Этот переход отображает новое содержимое с помощью showViewController: Отправитель: метод контроллера целевого представления. Для большинства контроллеров просмотра этот segue представляет новый контент modally над контроллером представления источника. Некоторые контроллеры представлений, конкретно переопределяют метод и используют его для реализации различных типов поведения. Например, для контроллера контроллер навигации переводит новый контроллер вида на в свой навигационный стек.

Убедитесь, что ваш первый viewController встроен в UINavigationController в Storyboard. Сделайте navigationControllerinitialViewController, если ваш первый viewController является initialViewController.Или же он мог бы представить новый viewControllermodally. Это означает, что нет navigationBar поверх нового viewController. Я думаю, это происходит в вашем случае.

Вы также можете попробовать удалить и воссоздать новый сегмент. Посмотрите это:
'Show' segue in Xcode 6 presents the viewcontroller as a modal in iOS 7

+1

Спасибо! Но, к сожалению, решение связанного вопроса не сработало (мой XML уже действителен, но я попытался удалить и прочитать segue, но ничего не произошло). Однако [этот ответ] (http://stackoverflow.com/a/26665626/3541881) привел к [этому] (http://stackoverflow.com/a/27713843/3541881) и просто добавил совершенно новый контроллер навигации из Проблемный viewcontroller работал !!! –

+0

Я все равно дам вам награду :), но знаете ли вы, почему он работает на новых устройствах без дополнительного контроллера навигации? Опять же, было бы здорово, если бы вы могли отредактировать ссылку на этот последний ответ, чтобы она служила ссылкой для сравнения, если кто-то еще найдет этот вопрос в будущем! :) –

+0

Спасибо @ ᔕᖺᘎᕊ. Может быть, переход на iOS 8 будет выведен во время выполнения, но на iOS 7 это решается гораздо раньше. В iOS 7 xcode загружается 'initialViewController'. Он не показывает «NavigationBar», если он не «встроен» в «navigationController» из «раскадровки». Однако я не полностью согласен с этим ответом. Встраиваясь в 'navigationController', я хотел означать добавление нового' navigationController' (как вы это делаете). Я согласен с этой частью. Но я также говорю, чтобы сделать новый «navigationController» «initialViewController» (флажок в xcode). Я не уверен. Продолжайте редактировать мой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^