3

問題

既存のプロジェクトに自動レイアウトを採用できないようです。

詳細

私は以前この質問presentViewControllerと同じ問題を抱えていました:iOS <6(AutoLayout)でクラッシュしましたが、提供された答えはどれも私にとって解決策ではありませんでした:私はxibsなしですべてのストーリーボードビューを使用しています。「自動レイアウトを使用」設定はすでにオフになっていて、iOS6しか使用していません。

ビューコントローラーが最初にクラッシュしていたので、制約を追加するように遅延を設定しましたが、呼び出し中にアプリがクラッシュするようになりましたaddConstraints:。最悪なのは、理由がわからないことです。

コード

コードをリンクしますが、非常に簡単です。

-(void)addAllConstraints
{
    NSDictionary * views = NSDictionaryOfVariableBindings(_memoryImage, _peopleView, _contentHolder, _commentsTableView);
    NSArray * constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[_memoryImage]-50-[_peopleView]-0-[_contentHolder]-0-[_commentsTableView]" options:0 metrics:nil views:views];
    NSLog(@"Views %@, Constraints %@", views, constraints);
    [_peopleView addConstraints:constraints];
    [_memoryImage addConstraints:constraints];
    [_contentHolder addConstraints:constraints];
   [_commentsTableView addConstraints:constraints];
}

_peopleViewaddConstraintsを呼び出すとアプリがクラッシュします。ビューとNSLayoutConstraintsの両方が正常に作成されます。

何か案は?ありがとう、ハッピーホリデー。

編集:

クラッシュログを追加して、有用なものが何も表示されていないことを示します。

2012-12-25 10:40:13.936 -----[4955:907] Views {
"_commentsTableView" = "<UITableView: 0x1eb6be00; frame = (0 372; 320 100); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x1e51ce00>; layer = <CALayer: 0x1e51cee0>; contentOffset: {0, 0}>";
"_contentHolder" = "<UIView: 0x1e5c6590; frame = (0 270; 320 112); layer = <CALayer: 0x1e5c27f0>>";
"_memoryImage" = "<UIButton: 0x1e5c4aa0; frame = (0 0; 320 280); opaque = NO; layer = <CALayer: 0x1e5c4b60>>";
"_peopleView" = "<UIView: 0x1f0ceea0; frame = (0 230; 320 50); layer = <CALayer: 0x1f0cf790>>";

Constraints (
"NSLayoutConstraint:0x1e51a880 V:[UIButton:0x1e5c4aa0]-(50)-[UIView:0x1f0ceea0]",
"NSLayoutConstraint:0x1e5ba4e0 V:[UIView:0x1f0ceea0]-(0)-[UIView:0x1e5c6590]",
"NSLayoutConstraint:0x1e51b860 V:[UIView:0x1e5c6590]-(0)-[UITableView:0x1eb6be00]"
)


}  
   (lldb) 
4

1 に答える 1

6

サブビューのスーパービューであるビューに制約が追加されることになっています。したがって、これらのオブジェクトがメインビューにある場合は、次のようにする必要があります(他のaddConstraints:行はありません)。

[self.view addConstraints:constraints];

また、ディクショナリのビューはnilで終了する必要があります(これが必要かどうかはわかりません。Appleの例でこれを行わなかったことに気づきましたが、関数定義ではnilで示されています) 。

于 2012-12-25T18:25:57.303 に答える