这是我第一次尝试以编程方式创建auto layouts constraints
,这是我的代码
- (void)viewDidLoad {
[super viewDidLoad];
UIView *view1 = [[UIView alloc]init];
view1.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:view1];
[view1 setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(view1);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[view1]-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:views];
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[view1]-|" options:0 metrics:nil views:views];
[view1 addConstraints:constraints];
[view1 addConstraints:verticalConstraints];
}
这是我在代码中尝试做的事情。
我正在犯这个巨大的错误
2015-12-16 12:13:59.254 test5b [1138:430691]视图层次结构不是 为约束做准备:何时 添加到视图中,约束的项必须是其后代 视图(或视图本身)。如果约束需要,这将崩溃 在组装视图层次结构之前解析。打断 - [UIView(UIConstraintBasedLayout)_viewHierarchyUnpreparedForConstraint:]进行调试。 2015-12-16 12:13:59.259 test5b [1138:430691]查看层次结构未准备好 约束。约束: 容器层次结构:>在容器层次结构中找不到视图:>那视图的超级视图:; layer => 2015-12-16 12:13:59.260 test5b [1138:430691] * 由于未捕获的异常'NSGenericException'而终止应用, 原因:'无法在视图上安装约束。是约束 引用视图子树外的东西?那是 非法。约束: 视图产品:>” * 第一次抛出调用堆栈:(0x1829f4f5c 0x1975e7f80 0x1829f4ea4 0x183890ef4 0x18804c620 0x18804c428 0x18804c2d0 0x18804c194 0x188056504 0x183890aa0 0x18805330c 0x188056420 0x1000d65f0 0x187f63a0c 0x187fd2fcc 0x187fd2f68 0x1881f494c 0x188200de4 0x1829ac48c 0x1829abdc4 0x1829a9d28 0x1828d8dc0 0x18da2c088 0x187fb2f60 0x1000d6ab8 0x197e128b8)libc ++ abi.dylib:终止于 NSException(lldb)
类型的未捕获异常
答案 0 :(得分:3)
向self.view
添加约束。替换以下内容:
[view1 addConstraints:constraints];
[view1 addConstraints:verticalConstraints];
带
[self.view addConstraints:constraints];
[self.view addConstraints:verticalConstraints];