2012-12-19 7 views
5

Es tut mir leid, wenn ich hier etwas verpasst habe, aber ich dachte, UIView Objekte, die in IB erstellt wurden sollten ihre Frames in ViewDidLoad erstellt werden, damit Sie initial Setup basierend auf tun können Diese Ansicht in viewDidLoad oder watchFromNib oder viewWillAppear. Ich protokollierte die Ausgabe in jeder Methode:UIView erstellt in IB hat keinen Frame in ViewDidLoad und watchFromNib

NSLog(@"%@ %s", NSStringFromCGRect(self.zoomView.frame), __FUNCTION__); 

Und in allem bekomme ich {0, 0, 0, 0}.

Dies ist die erste Nib in meinem UIStoryboard, und ich benutze Autolayout und iOS 6. Ich könnte auf früheren Anwendungen geschworen haben Ich habe den Rahmen von anderen UIView-Objekten in IB erstellt, um Dinge einzurichten. Hat sich etwas verändert? Oder erinnere ich mich nur falsch? Vielen Dank!

+2

Sind Sie zu 1000% sicher, dass das IBOutlet mit der Ansicht verknüpft ist? –

+0

@ 0x7fffffff Ja, ich bin 100% positiv, dass das IBOutlet verbunden ist. Ich habe es getrennt und wieder verbunden, um sicherzustellen, dass das nicht das Problem war. – Crystal

+0

Wenn es definitiv verknüpft ist, rufen Sie an dieser Stelle alloc/init in dieser Ansicht auf? –

Antwort

4

Ich hatte genau das gleiche Problem. Ja, du erinnerst dich richtig - früher war es anders in iOS 5. Ich habe meine Ansichten immer in viewDidLoad: eingerichtet und der Rahmen war bereits so, wie es sein würde, wenn die Ansicht tatsächlich auf dem Bildschirm war.

Jetzt in iOS 6, müssen Sie Ihren Code in setzen, um einen gültigen Rahmen zu haben, mit zu arbeiten, wenn auto layout aktiviert ist. Offensichtlich erfolgt die Auslegung zwischen diesen beiden Aufrufen.

+0

Wenn Sie in beiden einfach Auto-Layout-Option deaktivieren möchten. – itechnician

0

Ich denke, es hat mit dem Gerät zu tun, die Sie verwenden und möglicherweise andere Dinge, aber die Frames und Grenzen "könnte" manchmal durch die Zeit festgelegt werden, die ViewDidLoad aufgerufen wird und manchmal nicht (abhängig von ....) Auf der Andererseits sind Frames und Grenzen garantiert eingestellt, wenn "ViewDidAppear" aufgerufen wurde. Und Sie möchten Ihren Code in Bezug auf Rahmen und Grenzen setzen, wo es garantiert ist!

Verwandte Themen