0

我正在使用 MGSplitViewClass (链接)并且我很难正确设置 UICollectionView 的大小。在所说的拆分视图中,我在主视图中有一组四个 UIView,它们包含更强大的视图(表格视图、标签组和集合视图)。

首先,我尝试在我的 nib 中添加 UICollectionView 并以编程方式创建一个集合视图控制器并将其连接到我的 nib 的集合视图。我一尝试就失败了 _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.

好的,现在我将从我的 nib 中删除集合视图并添加集合视图控制器附带的视图,就像这样。

_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 回答