2016-03-29 5 views
0

Ich versuche, die Position einer View in Swift 2.0 zu aktualisieren. Aber es passiert nicht. Ich verwende kein Auto-Layout. Hier ist mein Code:UIView-Frame wird in Swift 2.0/iOS 8.0 und iOS 9.0 nicht aktualisiert.

func textViewDidBeginEditing(textView: UITextView) { 
    var frame : CGRect = self.frameView.frame 
    frame.origin.y = -390 
    //self.frameView.frame = frame 
    self.frameView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height) 
    print(" frame \(self.frameView.frame)") 
} 

Obwohl wenn ich Rahmen drucken zeigt es den aktualisierten Wert, aber die Änderung spiegelt nicht wider. Irgendeine Ahnung, was ich vermisse?

+0

Code ist in Ihrer 'ViewDidLoad' Methode oder 'viewWillAppear'? füge Code in deiner View hinzuWillAppear nicht in viewDidLoad. –

+0

Wird die Ansicht auf Storyboard/Xib hinzugefügt? –

+0

self.frameView ist deine Textansicht –

Antwort

0

Meine Vermutung ist, dass ein anderer Code den Rahmen zurück ändert und Ihre Änderung überschreibt. Deshalb sehen Sie den Rahmen nicht, wo Sie es erwarten. Verwenden Sie view debug, um den Rahmen zu prüfen (3 Rechtecke direkt unter Ihrem Code-Tab in xcode). Sie können auch einen symbolischen Haltepunkt auf der UIViewsetFrame Methode festlegen, um zu überprüfen, von wo der Rahmen geändert wird.

0

Stellen Sie sicher, dass Sie Constraints aktualisieren, nachdem Sie die Frames des UIView zur Laufzeit geändert haben. Hoffentlich sollte es funktionieren.

self.view .needsUpdateConstraints() 
self.view .needsUpdateConstraints() 
self.view .setNeedsLayout() 
self.view .layoutIfNeeded() 

oder wenn Sie nicht verwenden Autolayout dann überprüfen, ob Sie mit der rechten automatischen Größenmaske auf Storyboard setzen. Sie müssen AutoResizingMask programmatisch aktualisieren. Beispiel: -

self.view.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin |  UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |  UIViewAutoresizingFlexibleTopMargin 
+1

Oder verwenden Sie einfach AutoLayout richtig: P – Fogmeister

+0

Ich verwende nicht AutoLayout. Meine App verwendet kein AutoLayout. – TechBee

+0

@TechBee Bitte beachten Sie meinen Kommentar zu Ihrer Frage. Wenn Sie Ihrer App nicht explizit mitgeteilt haben, dass Sie AutoLayout nicht unbedingt in jedem einzelnen Benutzerbereich verwenden (dies ist sehr schwierig), verwenden Sie AutoLayout. – Fogmeister

0

Ich habe den Rahmen der Ansicht anstelle von frameView festgelegt und das Problem wurde gelöst.

Verwandte Themen