2015-12-01 12 views
7

Sto cercando di creare un popover e quando presento il controller di visualizzazione, lo sfondo è sempre nero e la dimensione è a schermo intero.Come presentare PopOver in iOS9

io non riesco a capire cosa c'è che non va e qui è il codice che ho

@IBAction func distancePopOver(sender : UIBarButtonItem){ 

    //a UIViewController that I created in the storyboard 
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver") 
    controller.modalPresentationStyle= UIModalPresentationSTyle.PopOver 
    controller.preferredContentSize = CGSizeMake(200,30) 
    self.presentViewController(controller, animated: true, completion: nil) 

    //Configure the Popover presentation controller 
    let popController = (controller.popoverPresentationController)! 
    popController.permittedArrowDirections = UIPopoverArrowDirection.Down 
    popController.barButtonItem = sender 
    popController.delegate = self 
    } 

Ogni volta che clicco sul UIBarButtonItem, presenta la visualizzazione a schermo intero, ma non dovrebbe essere la dimensione che ho specificato nella riga 5?

risposta

1

I popover sono abbastanza pignoli ora. Per prima cosa, si vorrà configurare popoverPresentationController prima di presentarlo.

In secondo luogo, assicurarsi che la direzione della freccia indichi il modo in cui punta la freccia e non il punto in cui il contenuto è relativo a UIBarButtonItem. Quindi, se è all'interno di UIToolbar (e si trova vicino alla parte inferiore dello schermo), ti consigliamo di usare .Down altrimenti, se si tratta di una barra di navigazione (nella parte superiore), ti consigliamo di utilizzare .Up.

@IBAction func distancePopOver(sender : UIBarButtonItem){ 

    //Configure the Popover presentation controller 
    let popController = (controller.popoverPresentationController)! 
    popController.permittedArrowDirections = .Down // .Up 
    popController.barButtonItem = sender 
    popController.delegate = self 

    //a UIViewController that I created in the storyboard 
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver") 
    controller.modalPresentationStyle = .Popover 
    controller.preferredContentSize = CGSizeMake(200,30) 

    presentViewController(controller, animated: true, completion: nil) 
} 

Ora, se si ha fino a questo punto e non è ancora funzionante, è perché il comportamento predefinito del popover in una classe di dimensioni compatte è quello di riempire lo schermo. Poiché stai già impostando il tuo controller di visualizzazione come delegato del popover, devi solo implementare questa funzione di delegato: adaptivePresentationStyleForPresentationController(_:traitCollection:) e restituire .None per lo stile di presentazione. Questo ti permetterà persino di mostrare un vero popover dall'aspetto sull'iPhone. Vedere il mio post sul blog: iPhone Popover per un esempio completo di questo.

+1

L'ultimo bit con adaptivePresentationStyleForPresentationController (_: traitCollection :) lo ha fatto per me. Grazie –

+0

Funziona bene su iPad, ma non su iPhone. – Satyam

Problemi correlati