0

MGSplitViewClass (リンク)を使用していますが、UICollectionViewのサイズを正しく設定するのに非常に苦労しています。上記の分割ビューでは、マスタービューに、より堅牢なビュー(テーブルビュー、ラベルのグループ、およびコレクションビュー)を含む4つのUIViewのセットがあります。

まず、ペン先にUICollectionViewを追加して、プログラムでコレクションビューコントローラーを作成し、ペン先のコレクションビューに接続しようとしました。私が試したとたんにこれはひどく失敗しました _collectionViewController.collectionView = myCollectionView;。これにより、ペン先からのビューがサブツリーの外にあるというエラーが発生しました 'NSGenericException', reason: 'Unable to install constraint on view. Does the constraint reference something from outside the subtree of the view? That's illegal.

さて、次にコレクションビューをペン先から削除し、コレクションビューコントローラーに付属しているものを追加します。

_collectionViewController = [[[MyCollectionViewController alloc] initWithCollectionViewLayout: [[[MyCollectionLayout alloc] init] autorelease]] retain];
[_collectionViewController.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
UICollectionView* collectionView = _attachmentController.collectionView;
[_collectionViewContainer addSubview:collectionView];

これは機能しますが、コレクションビューがビューコンテナのサイズやその他のレイアウトの問題で大幅にオーバーフローしています。明らかに、ビューはこのように正しくスクロールしないので、修正する必要があります。

そこで、いくつかの制約を追加して、コンテナビューを満たすサイズのビューを取得します。

NSMutableArray* constraints = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[collectionView]|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(collectionView)] mutableCopy];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|[collectionView]|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:NSDictionaryOfVariableBindings(collectionView)]];
for (NSLayoutConstraint* lc in constraints)
    [_attachmentViewContainer addConstraint:lc];

しかし、これはそれが厄介になるところです。これを実行すると、さらに多くのレイアウトエラーが発生します。

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
"<NSAutoresizingMaskLayoutConstraint:0x1d8c0b80 h=-&- v=-&- UICollectionView:0x1cb55400.midX == UIView:0x1d894300.midX - 10>",
"<NSLayoutConstraint:0x1c5a74b0 H:[UICollectionView:0x1cb55400]-(0)-|   (Names: '|':UIView:0x1d894300 )>",
"<NSLayoutConstraint:0x1c5a7440 H:|-(0)-[UICollectionView:0x1cb55400]   (Names: '|':UIView:0x1d894300 )>"

"<NSAutoresizingMaskLayoutConstraint:0x1d8c0d10 h=-&- v=-&- UICollectionView:0x1cb55400.midY == UIView:0x1d894300.midY + 437>",
"<NSLayoutConstraint:0x1c5a71a0 V:[UICollectionView:0x1cb55400]-(0)-|   (Names: '|':UIView:0x1d894300 )>",
"<NSLayoutConstraint:0x1c5a6f30 V:|-(0)-[UICollectionView:0x1cb55400]   (Names: '|':UIView:0x1d894300 )>"

それらのランダムに見えるNSAutoresizingMaskLayoutConstraintsはどこから来たのですか?より良い質問は、どこでそれらを取り除くことができるかということです。私はそれらを殺すためにジャンプするコードの単一のポイントを見つけることができないようです。-viewWillAppear:UIViewControllerを超えて伝播されないので、私はちょっと立ち往生しています。

どんな考えでも大歓迎です。

4

1 に答える 1

2

これらの制約を追加する直前に、次の行を追加してみてください。

[collectionView setTranslatesAutoresizingMaskIntoConstraints:NO];

これをNOに設定しない限り、システムはデフォルトの自動サイズ変更マスクを制約に自動的に変換します。

于 2013-01-30T00:10:40.550 に答える