ios - use - xcode views without any layout constraints




Desativar mensagens de erro de restrição de autolayout na saída do console de depuração no Xcode (3)

Eu tentei resolver isso usando lldb e encontrei uma solução:

  1. Crie um ponto de interrupção simbólico para o símbolo UIViewAlertForUnsatisfiableConstraints no módulo UIKit.
  2. Como ação do ponto de interrupção, adicione o comando debugger "retorno de thread"
  3. Adicione um segundo comando de depurador: "c"
  4. Desative "Continuar automaticamente após avaliar ações"

Se o seu aplicativo encontrar um problema de layout, a execução será pausada. Com a instrução "retorno de thread", a função UIViewAlertForUnsatisfiableConstraints que imprime o erro é forçada a retornar antes que a mensagem de aviso seja impressa no console.

Com o comando "c", a execução do seu aplicativo é continuada (Nota: "Continuar automaticamente após avaliar ações" de alguma forma não funciona nesse caso)

No entanto, com essas ações automáticas, é provável que o ponto de interrupção se comporte de maneira estranha se for atingido duas vezes seguidas, causando o travamento do aplicativo. Para resolver isso, você pode remover as ações do ponto de interrupção e inserir os comandos manualmente quando o depurador interromper a execução do programa.

Existe uma maneira de (temporariamente) desativar as mensagens de erro / aviso de pagamento automático:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>",
    "<NSLayoutConstraint:0x170098600 UIView:0x15c6294f0.leading == UIView:0x15c628d40.leadingMargin - 8>",
    "<NSLayoutConstraint:0x170098650 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62b750]>",
    "<NSLayoutConstraint:0x1700986a0 UIView:0x15c62b750.width == UIView:0x15c6294f0.width>",
    "<NSLayoutConstraint:0x1700986f0 UIView:0x15c628d40.trailingMargin == UIView:0x15c62b750.trailing - 8>",
    "<NSLayoutConstraint:0x170098880 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62c100]>",
    "<NSLayoutConstraint:0x1700988d0 UIView:0x15c628d40.centerX == UIView:0x15c62c100.centerX + 1>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Fiz algumas descompilações e há realmente uma maneira:

para Swift 3

 UserDefaults.standard.setValue(false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")

Objetivo-C

[[NSUserDefaults standardUserDefaults] setValue:@(NO) forKey:@"_UIConstraintBasedLayoutLogUnsatisfiable"];

Agora você será notificado apenas de que "_UIConstraintBasedLayoutLogUnsatisfiable está desativado".

Lembrete obrigatório para quem estiver lendo isso: este deve ser o último recurso. Para obter dicas sobre depuração e correção de problemas, consulte as sessões "Mistérios do layout automático" da WWDC: parte 1 e parte 2 .


Solução Swift 3.0:

//Hide Autolayout Warning
UserDefaults.standard.setValue(false, forKey:"_UIConstraintBasedLayoutLogUnsatisfiable")