UIPopover senza frecce
-
25-09-2019 - |
Domanda
E 'possibile presentare una popover senza alcun tipo di frecce che puntano da qualche parte?
Soluzione
Sì, è possibile solo fare:
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
Lo zero rappresentano nessuna direzione.
Altri suggerimenti
Per iPhone e rapido 2.0 provare questo
Codice per avviare popover
initiatePopover(){
let popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("XYZController") as! XYZController
let nav = UINavigationController(rootViewController: popoverContent)
nav.modalPresentationStyle = UIModalPresentationStyle.Popover
let popover = nav.popoverPresentationController
popoverContent.preferredContentSize = CGSizeMake(250 ,200)
popover!.delegate = self
popover!.sourceView = self.view
popover!.sourceRect = CGRectMake(200,200,0,0)
popover!.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
self.presentViewController(nav, animated: true, completion: nil)
}
E aggiungere questo al tuo ViewController
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
Impostare il permittedArrowDirections
a 0.
permittedArrowDirections:0
Codice -
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
Zero dice "NoDirection".
Swift3 , questo lavoro di codice per me
popover.permittedArrowDirections = .init(rawValue: 0)
Swift 2.0
e iOS9
la soluzione è:
popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
Prova questo, per me funziona.
[self.popoverViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES];
Swift4 :
popover.permittedArrowDirections = []
Questo funziona bene per me.
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
inView:self.view
permittedArrowDirections:NULL
animated:YES];
Godere di codifica.
No, non esiste alcuna opzione UIPopoverArrowDirectionNone
, e UIPopoverArrowDirectionUnknown
genera un'eccezione Penso che se si tenta di utilizzare che per oggi.
Al posto di un controller popover, è possibile chiamare presentModalViewController:animated:
e impostare il controller che si sta presentando ad avere uno stile di presentazione modale del UIModalPresentationFormSheet
o forse UIModalPresentationPageSheet
. Quelli sono schermate pop-up più tradizionali di popovers sono.
Nel mio caso per gli sviluppatori rapidi
popoverController.sourceView = self.view
popoverController.sourceRect = self.view.bounds
popoverController.backgroundColor = UIColor.brownColor()
popoverController.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0)
popoverController.sourceRect = CGRectMake(width/4, hieght/4, width/2, hieght/2);
In rapida 3, è possibile costruire un'estensione UIPopoverArrowDirection
per questo:
extension UIPopoverArrowDirection {
public static var noArrow: UIPopoverArrowDirection {
return UIPopoverArrowDirection(rawValue: 0)
}
}
e si può fare:
popoverPresentationController!.permittedArrowDirections = .noArrow
In Swift, si può semplicemente fare:
popoverPresentationController.permittedArrowDirections = []
Dato che in un'altra configurazione si potrebbe avere utilizzato:
popoverPresentationController.permittedArrowDirections = [.up, .down]
Prova questo
[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
Non utilizzare Popovers se non si desidera visualizzare le frecce. Presentate la vostra controller di vista come un modale e utilizzare un UIModalPresentationFormSheet invece.
Esempio:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
[presenterViewController presentViewController: viewController animated:YES completion:^{
}];
Io uso popover a show menu a seconda del tocco di coordinate. In questo caso popover utilizza altezza massima di self.view
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
Ma quando uso 0-direzione. Popover rettangolo non impostarla altezza massima e può essere impostato solo da proprietà appropriata.
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
Spero che questo vi aiuterà: con dimensioni UIPopOverController
Per fare un pop sopra direzione nessuno e farla apparire nel centro del controller della vista:
let PopSrnVar = popoverPresentationController
let ConRctVar = view.frame
PopSrnVar!.sourceRect = CGRectMake(ConRctVar.width/4, ConRctVar.height/4, ConRctVar.width/2, ConRctVar.height/2)
// To make arrows as none
PopSrnVar!.permittedArrowDirections = UIPopoverArrowDirection()
Una soluzione semplice a SWIFT:
popover!.permittedArrowDirections = nil