2015-06-30 4 views
3

У меня есть приложение с основными деталями (я создал его с использованием шаблона Xcode, а затем немного изменил его), и я пытаюсь установить свойство preferredDisplayMode UISplitViewController для получения этого поведения:UISplitViewController's preferredDisplayMode: неправильное поведение

UISplitViewControllerDisplayMode.PrimaryOverlay: контроллер основного представления накладывается поверх контроллера вторичного представления, оставляя частично видимый контроллер дополнительного вида.

Таким образом, главный контроллер просмотра должен быть сверху контроллера детали, и его следует уволить. Я изменить это свойство в приложении: didFinishLaunchingWithOptions :, это полный код:


// Inside application:didFinishLaunchingWithOptions: 
// Override point for customization after application launch. 
let rootViewController = window!.rootViewController as! UINavigationController 
// The root view controller is a navigation controller that contains the split view controller 
let splitViewController = rootViewController.viewControllers[0] as! UISplitViewController

let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem() splitViewController.delegate = self

splitViewController.preferredPrimaryColumnWidthFraction = 0.4 splitViewController.maximumPrimaryColumnWidth = 600 splitViewController.preferredDisplayMode = .PrimaryOverlay

return true

У меня есть две проблемы: во-первых, это не поведение, которое я получаю. Контроллер главного представления скрыт, когда приложение запускается, и если я нажму на элемент левой кнопки панели, чтобы показать мастер, он быстро появится и снова исчезнет. Если я нажму на нее в другой раз, она появится, не исчезнув.
Во-вторых, я получаю предупреждение в консоли:

2015-06-30 12:06:26.613 Presidents[29557:857547] Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x7b8be610>. 

Но у меня нет никаких переходов в моем коде.

PS: Это из книги «Beginning развития телефона с Свифтом» Д. Марком, Дж Nutting, К. Топлеем, Ф. Олссон, Дж LaMarche, глава 11.

ответ

0

Я получил эту работу в мое приложение для iPad. В Master View Controller:

override func viewDidLoad() { 
    super.viewDidLoad() 

    splitViewController?.delegate = self 

    let rect: CGRect = UIScreen.mainScreen().bounds 
    if rect.height > rect.width { 
     // am in portrait: trick to force the master view to open 
     self.splitViewController?.preferredDisplayMode = .PrimaryOverlay 
    } 

потом:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.splitViewController?.preferredDisplayMode = .Automatic 

Сейчас пытаются выяснить, как сделать это с приложением iPhone ... EDIT: ах, см this previous answer

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

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