AutoLayout を使用したビューがあり、さまざまな画面サイズでうまく機能します。画面には、ユーザーのアクションに応じて動き回る要素が 1 つあります。別の画面に移動してからこのビューに戻ると、この要素は元の位置にリセットされます。
これが起こる理由は理解できますが、どうすればそれを防ぐことができますか? 最初は正しくセットアップしたいのですが、最初からではありません。
AutoLayout を使用したビューがあり、さまざまな画面サイズでうまく機能します。画面には、ユーザーのアクションに応じて動き回る要素が 1 つあります。別の画面に移動してからこのビューに戻ると、この要素は元の位置にリセットされます。
これが起こる理由は理解できますが、どうすればそれを防ぐことができますか? 最初は正しくセットアップしたいのですが、最初からではありません。
私が見つけた唯一の解決策は、実装することですviewDidLayoutSubviews
layoutSubviews
ビューがロードされた直後にメソッドを呼び出します。
- (void)viewDidLayoutSubviews
{
@try
{
// Adjusting controls.
}
@catch (NSException *exception)
{
NSLog(@"%s\n exception: Name- %@ Reason->%@", __PRETTY_FUNCTION__,[exception name],[exception reason]);
}
}
Autolayout を使用している場合は、setFrame/setBounds を使用しないでください。これまで見てきたように、Autolayout はそれらを無視し、更新時に再書き込みするためです。
解決策は、制約を変更することです。制約には と呼ばれるパラメータがconstant
あり、これは作成後に制約で変更できる唯一のものです。NSView を移動する必要がある場合は、追加の制約を追加/削除することもできます。
AutoLayout を使用してビューを移動する方法の非常に良い例を示した WWDC 2012 のビデオがあります。