2017-01-09 2 views
1

Ich bin ein popover wie folgt präsentiert:Wie kann ich ein Popover erstellen, das eine scrollView enthält, die automatisch nach oben gescrollt wird?

let popoverContent = (self.storyboard?.instantiateViewController(withIdentifier: segueIdentifiers.informationPopover))! as UIViewController 
    let nav = UINavigationController(rootViewController: popoverContent) 
    nav.modalPresentationStyle = UIModalPresentationStyle.popover 
    let popover = nav.popoverPresentationController 
    popoverContent.preferredContentSize = CGSize(width: 500,height: 600) 
    popover?.delegate = self 
    popover?.sourceView = self.view 
    popover?.sourceRect = CGRect(x: 0, y: 0, width: 100, height: 100) 

    self.present(nav, animated: true, completion: nil) 

und

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

Die popover ist aus einem in der storyboard erstellt viewController geschaffen.

Die viewController mit der popover ist erstellt hat das folgende Layout.

--View 
---Scroll View 
----View 
-----Text View 

Ich hatte zunächst ein Problem, bei dem eine peinliche Menge an Speicherplatz dort zwischen dem oberen Rand des Behälters und dem Text View war. Unter Verwendung von this link sah ich, dass ich die Adjusts Scroll View Insets entfernen konnte. Das hat den unbeholfenen Abstand im oberen Bereich behoben, aber wenn sich der scrollView präsentiert, wird immer noch ein Drittel nach unten gescrollt und ein Teil des Textes oben ist ausgeblendet.

Ausgabe: Die scrollView ist ein Drittel des Weges nach unten gescrollt, wenn es präsentiert wird.

Fragen: Gibt es eine Möglichkeit die scrollView werden automatisch an der Spitze mit dem storyboard, das heißt, eine Laufzeit Attribut gescrollt zu initialisieren? Wenn nicht, wie kann ich das programmatisch machen, da ich die popover programmatisch über eine Storyboard-ID erstelle?

Update 1 Ich habe versucht, meine Subklassen viewController und einen Auslass für die scrollView zu schaffen. In meinem viewDidLoad, viewWillAppear, viewDidLayoutSubviews, viewDidAppear und viewWillLayoutSubviews habe ich den folgenden Code ausprobiert. Das hat mein Problem nicht gelöst.

let scroll2TopOffset = CGPoint(x: 0, y: 0) 
self.aboutUsScrollView.setContentOffset(scroll2TopOffset, animated: true) 

Antwort

0

Lösung: Die textView muss seine Rolle im im viewDidLoad ausgeschaltet haben und wandte sich dann in der viewDidAppear auf dem Rücken

class AboutUsViewController: UIViewController { 
    @IBOutlet weak var aboutUsTextView: UITextView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     aboutUsTextView.isScrollEnabled = false 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     aboutUsTextView.isScrollEnabled = true 
    } 
} 

offen lassen wird - wissen möchten, ob es eine bessere ist Art und Weise dies zu tun.

Verwandte Themen