Abaixo está a mensagem de erro que recebo na área de depuração. Ele funciona bem e nada está errado, exceto que eu recebo esse erro. Isso impediria a Apple de aceitar o aplicativo? Como faço para corrigir isso?
2012-07-26 01:58:18.621 Rolo[33597:11303] 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)
(
"<NSAutoresizingMaskLayoutConstraint:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
"<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
"<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
"<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
"<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
"<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
"<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
"<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
"<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
ios
objective-c
debugging
nslayoutconstraint
Johnny Cox
fonte
fonte
Respostas:
Eu recomendaria depurar e descobrir qual restrição é "a que você não deseja" . Suponha que você tenha o seguinte problema:
Sempre o problema é como encontrar as seguintes restrições e visualizações.
Existem duas soluções para fazer isso:
Como você sabe onde encontrar restrições inesperadas (PBOUserWorkDayHeaderView), há uma maneira de fazer isso razoavelmente bem. Vamos encontrar
UIView
eNSLayoutConstraint
em retângulos vermelhos. Como conhecemos o ID deles na memória , é bastante fácil.Como você pode ver, os ponteiros de memória são os mesmos. Então, sabemos o que está acontecendo agora. Além disso, você pode encontrar
NSLayoutConstraint
na hierarquia de exibição. Como está selecionado em Exibir, também foi selecionado no Navegador.Se você precisar, também pode imprimi-lo no console usando o ponteiro de endereço:
Você pode fazer o mesmo para cada restrição que o depurador apontará para você :-) Agora você decide o que fazer com isso.
IMPRIMIR MELHOR (eu realmente recomendo dessa forma, é do Xcode 7)
NSLayoutConstraint
:SWIFT :
OBJETIVO-C
id
basta tocar no seu Find Navigator :COMO SIMPLES CORRIGIR ESSE CASO?
999
a restrição quebrado.fonte
O problema que você está enfrentando é que o NSAutoresizingMaskLayoutConstraints não deve estar lá. Este é o antigo sistema de molas e suportes. Para se livrar dele, execute este método em cada exibição que você deseja restringir:
fonte
Cuidado , para não usar mais de uma restrição na mesma direção e tipo.
Por exemplo: Restrição vertical à direita = 15 e outra é> = 10.
Às vezes, o Xcode cria algumas restrições que você não percebe . Você precisa se livrar de restrições redundantes e o aviso de log certamente desaparecerá.
Além disso, você pode ler e detectar alguns motivos, diretamente do log :
Isso podemos ler como um problema na restrição UILabel, pois está levando a restrição vertical a 15pt de comprimento.
Isso seria uma restrição horizontal à direita, etc.
fonte
Eu tive várias dessas exceções lançadas, a maneira mais rápida e fácil de resolvê-las foi encontrar valores únicos nas exceções que eu procurei no código-fonte do storyboard. Isso me ajudou a encontrar as visualizações e restrições reais que causam o problema (eu uso userLabels significativos em todas as visualizações, o que facilita muito o rastreamento de restrições e visualizações) ...
Então, usando as exceções acima, eu abriria o storyboard como "código-fonte" no xcode (ou outro editor) e procuraria algo que eu pudesse encontrar ...
.. isso parece uma restrição vertical (V) em um UILabel com um valor de (17).
Examinando as exceções, também encontro
Parece que o UILabel (0x72bf7c0) está próximo a um UIButton (0x886efe0) com algum espaçamento vertical (8) ..
Espero que seja o suficiente para eu encontrar as visões específicas no código-fonte do storyboard (provavelmente pesquisando o texto por "17" inicialmente), ou pelo menos alguns candidatos prováveis. A partir daí, eu devo ser capaz de descobrir quais visualizações estão no storyboard, o que facilitará muito a identificação do problema (procure por pinos "duplicados" ou pinos que conflitam com as restrições de tamanho).
fonte
Eu tive dificuldade em descobrir quais restrições estavam causando esse erro. Aqui está uma maneira mais simples de fazer isso.
Estou usando o Xcode 6.1.1
fonte
Eu tive esse problema porque meus
.xib
arquivos estavam usando o layout automático.No inspetor de arquivos, primeira guia. Desmarcar "Usar Autolayout" resolveu o problema.
fonte
UIImageView
mudou. Você deve definir essa posição novamente, programaticamente ou através do Interface Builder.Aqui está a minha experiência e solução. Não toquei no código
fonte
use rapidamente este código
fonte
Eu segui perguntas e respostas SO de cada consulta de pesquisa. Mas todos eles estão relacionados com um específico.
No básico, quero dizer, antes de você escrever um formato (pode ser um formato simples), ele fornece avisos.
No iOS 8.0, as visualizações padrão são classes de tamanho. Mesmo se você desabilitar as classes de tamanho, elas ainda conterão algumas restrições de layout automático.
Portanto, se você planeja definir restrições via código usando VFL. Então você deve cuidar de uma linha abaixo.
Eu pesquisei bastante no SO, mas a solução estava no Apple Sample Code .
Portanto, você deve remover as restrições padrão antes de planejar adicionar uma nova.
fonte
Para mim, a principal razão desse problema foi que eu esqueci de desmarcar
AutoLayout
noXib
editor. De fato, fiz muitos ajustesXIB
no código.fonte
Isso me ajudou a entender o ponto de vista que estava causando o problema.
fonte
Nenhuma das respostas anteriores é útil na minha situação. Estou executando o XCode 10.1 e testando meu aplicativo no simulador para um "iPad (5ª geração)". O simulador está executando o iOS 12.1.
Eu tenho uma visão raiz simples no meu storyboard, com duas subviews UITextField. Não há nenhuma restrição sendo usada no storyboard. E não tenho objetos UIButtonBarView no aplicativo ou no storyboard.
Nenhuma mensagem é impressa quando o aplicativo é iniciado e expõe a visualização raiz. Nenhuma quando o dispositivo simulado é girado.
Mas no simulador, no momento em que clico em um dos campos de texto, a extensão do teclado surge na parte inferior da tela, embora não seja o teclado completo, que nunca parece aparecer no simulador. Mas o seguinte está impresso no terminal:
Certamente parece-me que tudo isso tem a ver com nada no meu aplicativo e tudo a ver com a maneira como a Apple está criando sua própria exibição de teclado, mesmo com minha pequena extensão declarada combinada com ela.
Portanto, a questão permanece: existe algo que eu, como desenvolvedor de aplicativos, sou responsável por fazer (na suposição de que isso seja um monte de coisas que vale a pena prestar atenção) ou é apenas o problema / bug da Apple?
FWIW, essa mensagem de problema de restrição não ocorre ao simular um modelo mais recente do iPad, como o iPad Pro de 12,9 polegadas (3ª geração). Mas a mensagem aparece ao simular um iPad Pro de 9,7 polegadas ". Todos alegando que estão executando o iOS 12.1.
fonte
Estou recebendo o mesmo erro, mas apenas em uma exibição específica, quando toco no primeiro campo de texto e depois no próximo campo de texto.
Estou escrevendo no SwiftUI para iOS 13.4
fonte
Eu também estava recebendo o mesmo problema de quebrar restrições no log, para um viewCircle no xib. Eu quase tentei tudo listado acima e nada estava funcionando para mim. Tentei alterar a prioridade da restrição de altura que estava quebrando no log (confirmada adicionando um identificador para as restrições no xib) e insira a descrição da imagem aqui
fonte
Uma coisa a ser observada (pelo menos isso me tropeçou) era que eu estava removendo a restrição da visão errada. A restrição que eu estava tentando remover não era uma restrição infantil da minha opinião, então, quando o fiz
na verdade, não estava removendo nada, porque eu precisava ligar
uma vez que a restrição era tecnicamente uma restrição irmão da minha opinião.
fonte
veloz 4
Acabei de adicionar esta linha no viewDidLoad e funcionou bem comigo.
fonte