Я использую MGSplitViewClass (ссылка) В указанном разделенном представлении у меня есть в главном представлении набор из четырех 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, поэтому я застрял.
Любые мысли очень приветствуются.