当前位置: 首页 > 知识库问答 >
问题:

导致冲突的神秘NSLayoutConstraints

赫连明诚
2023-03-14

我使用的是MGSplitViewClass(链接),我很难正确设置UICollectionView的大小。在上述拆分视图中,我在主视图中有一组四个UIView,其中包含更健壮的视图(表视图、标签组和集合视图)。

首先,我尝试在nib中添加UICollectionView,并通过编程创建了一个集合视图控制器,并将其连接到nib的集合视图。我一试collectionViewController,这就失败了。collectionView=myCollectionView 。这导致有关我的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来自哪里?更好的问题是我在哪里可以摆脱他们?我似乎在代码中找不到一个点可以跳进去杀死他们<代码>-视图将出现:没有通过UIViewController传播,所以我有点卡住了。

欢迎有任何想法。

共有1个答案

全昊焜
2023-03-14

添加这些约束之前,请尝试添加此行:

[集合视图设置TranslatesAutoResizingMaskintoConstraints:否];

除非将其设置为“否”,否则系统将自动将默认自动调整大小掩码转换为约束。

 类似资料:
  • 我正在开发jira插件。当我尝试部署它时,我收到一个错误: 创建URL中定义了名为“userService”的bean时出错[bundle://205.0:1/com/softwareplant/tool/service/UserService.class]:通过构造函数实例化Bean失败;嵌套的例外是java。lang.LinkageError:加载程序约束冲突:解析方法“org.slf4j.i

  • 问题内容: 运行以下 xjc 命令会引发错误: 尽管我了解JAXB绑定以及XJC中的冲突是什么,但我不了解当前模式中的冲突在哪里。 我该如何解决? 谢谢, 皮埃尔 更新:这是错误的上下文: 问题答案: 我将引用网上JAXB上最官方的非官方指南。 当架构包含外观相似的元素/类型名称时,它们可能导致“两个声明在ObjectFactory类中引起冲突”错误。更准确地说,对于所有类型和许多元素中的每一个(

  • 问题内容: 看起来我偶然发现了一个元类地狱,即使我不想做任何事情。 我正在使用PySide在Qt4中编写一个应用程序。我想将事件驱动的部分与UI定义分开,UI定义是从Qt Designer文件生成的。因此,我创建了一个“ controller”类,但是为了简化我的生活,我还是对它们进行了多重继承。一个例子: 这按预期工作。它也有继承自(,,)。但是,当我子类化并尝试从所述子类继承(代替)时,会收到

  • 问题内容: 尝试用于为SOAP端点生成客户端。WSDL和所有使用的XSD文件都是本地副本。 这是正在执行的命令: 出现此错误: 请注意,行号与报告的冲突相同。 这是模式: 我试过删除类型定义,但在其他许多地方都引用了它。 任何人都可以就如何使其正常工作提供任何建议吗? 谢谢 编辑: WSDL导入这些模式的行如下: 问题答案: 感谢@Petru Gardea的帮助,我最终通过将软件包规范省略为wsi

  • 我只是使用Swagger生成代码。io使用OpenApi 3.0规范。它生成的代码无法编译。一旦课堂有了这个看似至关重要的意义: 但我得到了这个错误:

  • 使用: 所有类都在中生成,在中没有类。没有-p开关,所有xsd都是在它们自己的默认包中生成的。但无法告诉wsimport为每个XSD使用特定的包。现在我使用以下绑定文件,这可能是不正确的,但wsimport对此没有抱怨: 在包org.broker.wsi.b_2和org.broker.wsi.t_1中,不生成任何文件。 欢迎提出建议。