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を超えて伝播されないので、私はちょっと立ち往生しています。
どんな考えでも大歓迎です。