0

AutoLayout を使用したビューがあり、さまざまな画面サイズでうまく機能します。画面には、ユーザーのアクションに応じて動き回る要素が 1 つあります。別の画面に移動してからこのビューに戻ると、この要素は元の位置にリセットされます。

これが起こる理由は理解できますが、どうすればそれを防ぐことができますか? 最初は正しくセットアップしたいのですが、最初からではありません。

4

2 に答える 2

3

私が見つけた唯一の解決策は、実装することですviewDidLayoutSubviews

layoutSubviewsビューがロードされた直後にメソッドを呼び出します。

- (void)viewDidLayoutSubviews
{
    @try
    {
         // Adjusting controls.
    }
    @catch (NSException *exception)
    {
        NSLog(@"%s\n exception: Name- %@ Reason->%@", __PRETTY_FUNCTION__,[exception name],[exception reason]);
    }
}
于 2013-03-15T01:51:38.407 に答える
1

Autolayout を使用している場合は、setFrame/setBounds を使用しないでください。これまで見てきたように、Autolayout はそれらを無視し、更新時に再書き込みするためです。

解決策は、制約を変更することです。制約には と呼ばれるパラメータがconstantあり、これは作成後に制約で変更できる唯一のものです。NSView を移動する必要がある場合は、追加の制約を追加/削除することもできます。

AutoLayout を使用してビューを移動する方法の非常に良い例を示した WWDC 2012 のビデオがあります。

于 2013-03-16T14:41:52.057 に答える