restricciones parental olvide eliminar control como codigo borrar bloquear aplicaciones iphone objective-c ios6 xcode4.5

parental - olvide mi codigo de restricciones iphone 5



NSGenericException '', razón:'' No se puede instalar la restricción en la vista (7)

Aplicación de terminación debido a la excepción no detectada ''NSGenericException''

Aplicación de terminación debido a la excepción no detectada ''NSGenericException'', motivo: ''No se puede instalar la restricción en la vista. ¿La restricción hace referencia a algo que está fuera del subárbol de la vista? Eso es ilegal restricción: ver :; capa =; contentOffset: {0, 0}> ''


Al igual que neoneye, recibí esto debido a la eliminación de subvistas con restricciones. Sin embargo, tenía una restricción que estaba posicionando la vista principal, y esto se eliminaba si llamaba [self.view removeConstraints:self.view.constraints]; En su lugar hice este cambio,

Código original:

for (UIView *subview in [view subviews]) { [subview removeFromSuperview]; }

Corregido para eliminar restricciones en subvistas:

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]; }

ACTUALIZACIÓN : Así que volví a hacer este error, y esta vez se debió a eliminar una sola vista. Añadida una función para eliminar la vista limpiamente:

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]; }


Conseguí este problema usando un UIPickerView como entrada de un UITextField (usando Autolayout). Cuando presiono otro viewController y, por lo tanto, lo abro al viewController con el selector, la aplicación falla. Encontré la siguiente solución, en el UIPickerViewController:

-(void)viewWillAppear:(BOOL)animated{ [self.pickerView removeFromSuperview]; [self.pickerView setTranslateAutoresizingMaskIntoContraints:YES]; [self.view addSubview]; }

También puede configurar UIPickerViewPosition después de quitarlo de superview. Espero que te pueda ayudar!


Debe instalar la restricción en la "superior" de las dos vistas. Una buena forma general de hacer esto es así:

NSLayoutConstraint* constraint = ...; NSView* firstView = constraint.firstItem; NSView* secondView = constraint.secondItem; [[firstView ancestorSharedWithView: secondView] addConstraint: constraint];

Solo una advertencia: es bueno recordar que los atributos de restricción se evalúan en el contexto de la vista en la que se agregan. Entonces, por ejemplo, el valor de NSLayoutAttributeLeft de viewA, para una restricción instalada en viewB, se interpreta en el espacio de coordenadas de viewB. Para las restricciones que solo hacen referencia a las vistas de los hermanos o su supervisión, ese hecho es en gran medida irrelevante, pero no hay ninguna restricción que las restricciones no puedan hacer referencia a dos vistas que no sean hermanos o padres directos.


Encontré que esta única línea de código solucionó este problema para un ScrollView de cacao.

[scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];

Creo que ciertas vistas agregan restricciones en el tiempo de ejecución, por lo tanto, son conflictivas cuando se agrega la suya a través del objetivo c, por lo que debe deshabilitar este comportamiento ...


Experimenté este error en iOS6. En mi caso fue porque comencé a eliminar subvistas sin eliminar primero las restricciones.

// 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];


Mismo error, diferente solución aquí:

Recibí este error al iniciar mi aplicación en iOS 6 después de agregar una nueva vista y olvidarme de apagar Use Auto Layout en ella en el generador de interfaces ... Odio que no haya una configuración estándar para NO usar diseño automático de forma predeterminada para nuevos puntos de vista ...