2016-07-25 32 views
0

Ich mache ein ziemlich normales Popover, aber wo auch immer ich es platziere, es zeigt etwas über dem Anrufer-Knopf.swift - Popover-Zeiger zeigt nicht auf seinen Anrufer

Ich verband das Popover durch das Storyboard. Im Popoverviewcontroller platzierte ich eine Ansicht, die die Buttons enthält. Der Code für die viewDidLoad() des popoverviewcontroller ist:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.preferredContentSize = popoverView.frame.size 
     } 

Ist es passiert, weil ich den Knopf zu nahe an der Spitze platziert?

enter image description here

+0

Können Sie Ihr Code-Snippet teilen, sonst wird es schwierig, das Problem zu analysieren? – SHN

+0

@SHN Ich habe jetzt den Code –

Antwort

1

Sie müssen Ankerpunkt für die popover schaffen, durch Eigenschaften Sourceview und sourceRect verwenden. Nutzen Sie die prepareForSegue func des präsentierenden Controller Eigenschaften des popover zu setzen wie unten:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SegueIdentifier" { 
     let destController = segue.destinationViewController 
     let popover = destController.popoverPresentationController; 

     destController.popoverPresentationController!.delegate = self 
     destController.preferredContentSize = CGSize(width: 320, height: 186) 
     popover?.sourceView = self.button; 
     popover?.sourceRect = self.button.bounds 
    } 
} 

Sie auch preferredContentSize hier als diese Weise den Code modular aufgebaut ist und Ihre Inhalte View-Controller zur Verfügung stellen kann, kann an anderer Stelle verwendet werden auch.

In meinem Verständnis bedeutet das Verknüpfen des Pop-Over-Segments in storyBoard, dass Sie SourceView bereitstellen. Wie in den Apple-Dokumenten angegeben, verwenden Sie für die Bereitstellung von Ankerpunkten sourceView in Verbindung mit sourceRect. Ich vermute, wenn Sie SourceRect nicht bereitstellen (wie in Ihrem Fall mit Storyboards), nimmt OS den Ursprung der Ansicht, weshalb der Pfeil von Popover nicht korrekt ist. Die Angabe eines geeigneten SourceRect wird Ihr Ergebnis verbessern.

+0

hinzugefügt Ich habe es bereits mit dem Anker, der in diesem Fall "Button4" ist, durch das Storyboard verknüpft. Hätte ich den Anker nicht bereitgestellt, hätte die App einen Fehler ausgegeben. Das Problem ist, dass der Pfeil leicht über seinen Anker zeigt. –

+0

Es hat funktioniert. Vielen Dank! –