终止应用程序由于未捕获的异常“NSGenericException”
终止应用程序由于未捕获的异常“NSGenericException”,理由是:“无法在视图安装约束。 是否从该视图的子树外的约束参考的东西吗? 这是非法的。 约束:观点:; 层=; contentOffset:{0,0}>”
终止应用程序由于未捕获的异常“NSGenericException”
终止应用程序由于未捕获的异常“NSGenericException”,理由是:“无法在视图安装约束。 是否从该视图的子树外的约束参考的东西吗? 这是非法的。 约束:观点:; 层=; contentOffset:{0,0}>”
你需要在这两种视图“更高”安装约束。 做一个很好的,一般的方式是这样的:
NSLayoutConstraint* constraint = ...;
NSView* firstView = constraint.firstItem;
NSView* secondView = constraint.secondItem;
[[firstView ancestorSharedWithView: secondView] addConstraint: constraint];
只是提醒一句:这是很好的位置记住,约束属性在其上加入他们的观点的背景下进行评估。 因此,例如,viewA的NSLayoutAttributeLeft的价值,为安装在viewB一个约束,也是解释viewB的坐标空间。 对于仅引用兄弟姐妹观点或他们的上海华限制,这一事实在很大程度上是不相关的,但没有限购令的约束不能引用不属于兄弟姐妹或父母直接两种观点。
类似neoneye我得到这个因与约束删除子视图。 但是我有被定位父视图的约束,并且如果我称这种正在除去[self.view removeConstraints:self.view.constraints];
相反,我做了这个变化,
原始代码:
for (UIView *subview in [view subviews]) {
[subview removeFromSuperview];
}
固定于子视图删除约束:
NSMutableArray * constraints_to_remove = [ @[] mutableCopy] ;
for( NSLayoutConstraint * constraint in view.constraints) {
if( [view.subviews containsObject:constraint.firstItem] ||
[view.subviews containsObject:constraint.secondItem] ) {
[constraints_to_remove addObject:constraint];
}
}
[view removeConstraints:constraints_to_remove];
for (UIView *subview in [view subviews]) {
[subview removeFromSuperview];
}
更新 :所以我又打这个错误-它是由于删除这段时间的单一视图。 新增了一个功能,彻底移除的观点:
void cleanRemoveFromSuperview( UIView * view ) {
if(!view || !view.superview) return;
//First remove any constraints on the superview
NSMutableArray * constraints_to_remove = [NSMutableArray new];
UIView * superview = view.superview;
for( NSLayoutConstraint * constraint in superview.constraints) {
if( constraint.firstItem == view ||constraint.secondItem == view ) {
[constraints_to_remove addObject:constraint];
}
}
[superview removeConstraints:constraints_to_remove];
//Then remove the view itself.
[view removeFromSuperview];
}
我经历了iOS6的这个错误。 在我的情况,那是因为我开始不先消除限制移除子视图。
// I had forgotten to remove constraints first. This caused the crash.
[self.view removeConstraints:self.view.constraints];
NSArray *subviews = self.view.subviews;
for (UIView *subview in subviews) {
[subview removeFromSuperview];
}
[self addYourSubviewsHere];
我用像的UITextField(使用自动布局)输入一个UIPickerView这个问题。 当我把另一个的viewController,从而弹出它到ViewController与选择器,应用程序崩溃。 我发现下面的解决方案,在UIPickerViewController:
-(void)viewWillAppear:(BOOL)animated{
[self.pickerView removeFromSuperview];
[self.pickerView setTranslateAutoresizingMaskIntoContraints:YES];
[self.view addSubview];
}
您也可以从上海华盈取出后设置UIPickerViewPosition。 我希望能帮助你!
我发现加入这一行代码修复了这个问题的可可滚动型。
[scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
我认为某些视图在运行时添加的限制,因此,当您通过Objective C中添加自己的,所以你需要禁用此行为发生冲突......
同样的错误,不同的解决方案在这里:
我上添加一个新的观点,忘记关掉后,开始了我在iOS 6应用此错误Use Auto Layout
就可以在界面生成器......我恨它有没有标准设置默认情况下不新使用自动布局意见...
我有同样的崩溃,它原来是一个浮点精度问题约束乘数值。 我将我所有的约束乘数不错浮点值(例如0.375,而不是0.35)和固定的崩溃。
自动版式:removeFromSuperview / removeConstraints抛出异常和崩溃硬