2017-03-21 2 views
0

Ich versuche, den Effekt der mobilen YouTube App für iOS wiederherzustellen, wenn ein Video im Vollbildmodus im Querformat wiedergegeben wird. Nur der obere Teil eines Fensters (nächste/empfohlene Videos) ist sichtbar, und beim Wischen nach oben werden sie überlappend mit Video angezeigt (das im Hintergrund läuft). Wenn Sie nach unten wischen, werden sie wieder ausgeblendet.Ein Popover teilweise außerhalb des Bildschirms anzeigen

So habe ich den folgenden Code in meinem Video-Controller, der das Video im Querformat zeigt:

private func showPopover() { 
    let popoverController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "popoverController") 

    popoverController.modalPresentationStyle = .popover 
    popoverController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 
    popoverController.popoverPresentationController?.delegate = self 
    let desiredWidth:CGFloat = 200 
    let desiredHeight:CGFloat = 300 

    // Initially it's at low right corner 
    let origin = CGPoint(x: (self.view.superview?.frame.width)! - desiredWidth - 10, y: (self.view.superview?.frame.height)! - 10) 
    let size = CGSize(width: desiredWidth, height: desiredHeight) 
    popoverController.popoverPresentationController?.sourceRect = CGRect(origin: origin, size: size) 
    popoverController.popoverPresentationController?.sourceView = popoverController.view 
    self.present(popoverController, animated: true, completion: nil) 
} 

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 
    return .none 
} 

Die popover fein zeigt sich, ist aber immer vollständig auf dem Bildschirm. Ich brauche es nur teilweise sichtbar (nur die oberen 10 Pixel, wenn möglich). Aber etwas verhindert, dass der View-Controller auf diese Weise positioniert wird.

screenshot

Wie bewege ich die popover, so dass nur Top-10-Pixel sichtbar sind? Es sollte unter so etwas wie in dem Bild sehen (Anmerkung: diese wurde Erzeugung von Bildbearbeitung, nicht programmatisch):

desired state

Antwort

0

Einen Weg gefunden, und es ist lächerlich einfach (im Nachhinein natürlich!). Changed die letzte Zeile der showPopover Funktion:

 self.present(popoverController, animated: true) { 
     popoverController.popoverPresentationController?.presentedView?.center = CGPoint(x: (self.view.superview?.frame.width)! - desiredWidth - 10, y: (self.view.superview?.frame.height)! + 100) 
    } 

Ich werde eine bestimmte Anzahl bekommen statt 100 verwenden, aber die Ansicht bewegt sich in dieser Position ohne Probleme.

1

Ersetzen Sie diese:

popoverController.popoverPresentationController?.sourceView = popoverController.view 

mit diesem:

popoverController.popoverPresentationController?.sourceView = self.view 

UPDATE

Ok ich verstehe jetzt. Meine Antwort wäre, dass es nicht möglich ist, nur einen Teil des Popover zu zeigen.

Mein Vorschlag hier ist UITableViewController als Ihr Popover und machen seine Höhe gerade genug, um die erste Zeile anzuzeigen, die den Text in diesem Fall ist.

Dann, in Delegate-Methode, implementieren Logiken zu erkennen, wischen nach oben zeigen und wischen nach unten zu verstecken.

+1

Macht überhaupt keinen Unterschied, leider. – LNI

+0

Können Sie bitte einen Screenshot bereitstellen, was auf dem Bildschirm passiert? –

+0

Sicher, nur die Bearbeitung zu Frage, um einen Screenshot hinzuzufügen. – LNI

Verwandte Themen