0

私は2つのビューコントローラーを持っています。そのうちの1つはもう1つのサブビューです。両方のビューは、ペン先を介してロードされます。viewDidLoadサブビューコントローラには、親ビューコントローラの位置が設定されています。親ViewControllerがUIWindowのルートViewControllerとして設定されている場合、SubViewControllerのビューの位置をにリセットします{0.0, 0.0}

サブビューコントローラーのビューのフレームを監視し、ブレークポイントを追加したため、これがウィンドウであることがわかります(オブザーバーは親ビューコントローラーです)。スタックトレースは次のように報告します。

#0  0x000d34e0 in -[ParentViewController observeValueForKeyPath:ofObject:change:context:]
#1  0x32866eb0 in NSKeyValueNotifyObserver ()
#2  0x32866b0a in NSKeyValueDidChange ()
#3  0x32840eca in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#4  0x39b87d9e in -[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:] ()
#5  0x39b4075e in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#6  0x39b405be in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#7  0x39b3ae4a in -[UIView(Hierarchy) _postMovedFromSuperview:] ()
#8  0x39b227dc in -[UIView(Internal) _addSubview:positioned:relativeTo:] ()
#9  0x39b222c2 in -[UIView(Hierarchy) addSubview:] ()
#10 0x39b7fe42 in -[UIWindow addRootViewControllerViewIfPossible] ()
#11 0x39b7bae4 in -[UIWindow _setHidden:forced:] ()

位置を設定するつもりがない場合は、viewDidLoadどこに設定するのですか?

更新: 位置が変わっただけだと思いましたが、同じパスで寸法が設定されています。ペン先では、横向きの寸法に設定されていますが、フレームはで縦向きの寸法に設定されてい{0.0, 0.0}ます。

4

2 に答える 2

2

viewWillAppearまたはでそれを行うことをお勧めしviewDidAppearます。が呼び出されたときviewDidLoad、ビューはメモリにロードされただけで、まだ画面に描画されていないため、このような問題が発生します。

于 2012-12-17T13:05:57.373 に答える
0

いくつかの異なる検索キーワードを試してみると、非常に役立つことがわかったリンクがいくつか見つかりました。

最初はNumanTariqが言っていたことの詳細を説明し、最後は私の問題を説明します。

問題は、自動サイズ変更マスクが設定されていないことです。Interface Builderでは、ビューの幅と高さが柔軟で、すべての余白にロックされている場合と、左右の余白だけがロックされている場合があります。私がそれを使用している方法のために、私は最初のものを持っているビューが必要です。これで動作し、正しいサイズと、Numan Tarig;)のおかげで位置が表示されます。

于 2012-12-17T14:25:07.340 に答える