Fiz o download do novo Xcode e no Interface Builder estou tendo muitos problemas com avisos que dizem coisas como:
Restrições de largura fixa podem causar recorte
Se parece com isso:
Eu tenho localização para vários idiomas e entendo o aviso de que em outro idioma o tamanho de um rótulo pode mudar, mas meu aplicativo não tem esse problema. Eu corri e testei no Xcode 8 ontem, estava tudo bem. Não quero gastar horas e horas adicionando novas restrições inúteis.
Alguma solução sugerida?
Respostas:
Eu estava recebendo os mesmos avisos, mesmo sem vários idiomas no meu aplicativo , o que me levou a descobrir o que realmente estava acontecendo. . .
Há algumas coisas diferentes acontecendo aqui. Consegui silenciar os avisos de largura fixa no meu próprio aplicativo alterando a largura dos espaçamentos do objeto de largura fixa para maior ou igual a ou menor ou igual a .
Isso pode ser feito selecionando o objeto no construtor de interface, acessando o inspetor de tamanho e alterando-o:
Ou selecione a restrição no contorno do documento, vá para o inspetor de tamanho e altere-a lá:
Quanto ao aviso na parte superior da tela:
Aqui está uma captura de tela do meu próprio aplicativo, na qual recebi exatamente o mesmo aviso:
Eu tinha o rótulo com o sinal @ definido como inicial e posterior aos botões, mas também para alinhar o centro com o rótulo de classificação . Depois que removi a restrição de alinhamento central , o aviso desapareceu, mas fiquei com um conjunto de objetos mal disposto.
Foi então que me resignei a adotar o modo de exibição de pilha . Por mais chato que seja o uso, quando você obtém todas as restrições e configurações corretas, ele apresenta belamente e sem avisos.
Editar
Como Repose escreve nos comentários, às vezes simplesmente adicionando> = 0 será o que você precisa, pois você garante que dois elementos não se sobreponham.
fonte
Você pode tentar Desativar "Respeitar a direção do idioma", de acordo com as restrições, para silenciar o aviso e ver se ele ajuda. Selecione sua restrição e abra o Inspetor de Atributos / Tamanho. Por favor, veja a imagem em anexo.
Se você não planeja localizar seu aplicativo em outros idiomas, esta solução não deve ter substitutos. Para aplicativos localizados, você precisa ter mais consciência dos tamanhos de etiqueta e fonte.
ps Esta solução funciona para iOS. Para o macOS, tente> = ou <= para silenciar o aviso.
pps Os rótulos na figura abaixo são muito mais fáceis de criar usando o AutoLayout e a propriedade attributeString em um único UILabel ou UITextView usando NSMutableAttributedString. A imagem é apenas para fins de demonstração.
fonte
Para rótulos e botões localizados, esse aviso faz sentido e você deve fornecer as restrições necessárias para que seus rótulos não se sobreponham. Se eles não se sobrepuserem agora, poderão no futuro, portanto, não fará mal fornecer as restrições.
O Xcode ajuda a adicionar essas restrições automaticamente:
No esboço do documento do seu storyboard, clique na seta amarela e escolha "fixo inicial" ou "fixo fixo", dependendo de onde o texto está na tela (esquerda ou direita). Isso irá corrigi-lo para a maioria dos problemas.
Se você tiver esse problema com um botão sem texto (apenas imagem), tente remover o "título padrão" que ainda pode estar definido para o botão:
fonte
UIButton
aStoryboard
, odefault button
título serábutton
.Com
Labels
, você pode definirLines
is0
eAutoshrink
propertiesMinimum Font Size
para removerFixed Width Constraints May Cause Clipping
avisos, como este:fonte
Outra solução rápida!
Para um UIButton, alterar o título de texto simples para Atribuído também resolveu meu problema: -
fonte
Sei que esta pergunta já foi respondida, mas o que fiz para corrigir esse erro no meu caso foi adicionar a propriedade "Proporção da imagem" e eliminar a restrição de largura ou altura, que funcionou muito bem e foi menos trabalhoso, e consegui manter a mesma saída e adaptar minha visão para os diferentes dispositivos.
fonte
Swift 4, Xcode 9.1:
Sobre esse problema, acho que seu objeto não sabe qual é a posição central correta no contexto de sua superview , e o uso de remove, maior que ou outras configurações de liderança / rastreamento na maioria das vezes não funciona corretamente. Primeiro, você deve verificar as restrições corretas da sua superview.
Se suas supervisões estão definidas corretamente, você pode tentar "explicar" ao seu objeto qual é a posição correta na exibição, definindo a restrição "horizontalmente no Contêiner" :
fonte
Se você precisar de uma restrição de largura fixa para o botão, defina a prioridade da restrição de largura como
700
.fonte
Eu tive o mesmo problema, mas quando eu mudo para
>=
ele, defina automaticamente a constante como0
, se eu escolher,60
por exemplo, o aviso aparecerá novamente. Então, eu estava em um loop com o problema.Eu poderia consertar a incorporação do meu
Label
em umView
Em
Label
I setTop
,Bottom
,Leading
eTrailing
comconstant = 0
Em que
View
eu defini oconstraints
que eu estava esperando antes.fonte
Eu tive o mesmo problema ao mudar para o Xcode 9 e encontrei uma abordagem útil para certos tipos de layouts. No meu caso, eu queria um cabeçalho de tabela em que duas colunas (UILabels) fossem de largura fixa e outra de largura variável. Independentemente de como eu especifiquei as larguras das colunas (incluindo o uso de restrições maiores ou iguais em vez de iguais, etc.), recebi o aviso sobre possíveis recortes. No meu caso, eu queria que a coluna de largura variável (UILabel) cortasse, se necessário. Eu poderia ter ignorado o aviso, mas não gosto de fazer isso.
A abordagem que funcionou aqui foi criar um UIView com restrições de tamanho apropriadas e incorporar o UILabel como uma subvisão no UIView. Então o truncamento acontece se necessário e não recebo nenhum aviso. Isso funciona se o UIView / UILabel incorporado estiver em um StackView ou não.
Essa é essencialmente a mesma abordagem que a de Haroldo Gondim, mas aqui você pode ver que ela também funciona com ou sem o StackView.
A imagem a seguir mostra a abordagem, com e sem o StackView. "SpacerName" é um UIView de largura variável que contém um rótulo e "SpacerPD" é um com largura fixa de 80. [As cores não são significativas; apenas para mostrar onde estão as vistas.]
fonte
Como você pode ver na imagem abaixo, eu estava tendo o erro "Restrições de largura fixa podem causar recorte" porque, embora eu tenha definido minha caixa de texto para ser verticalmente centralizada e meu rótulo para ter uma restrição de margem esquerda, eu não havia definido uma restrição para a caixa de texto em relação ao rótulo, o XCode estava me alertando que a caixa de texto poderia cortar (ser renderizada acima) o rótulo.
Depois de adicionar a restrição esquerda à caixa de texto para sempre ficar a uma certa distância do rótulo, o erro foi considerado resolvido pelo XCode e não me incomodou mais com o aviso de restrição.
fonte
Eu tive um problema semelhante ao tentar ter o botão com os mesmos preenchimentos das bordas da super visão.
Acabei usando
horizontal center
restrição eequal widths
restrição para osuper view
.fonte
Para corrigir o erro : restrições de largura fixas podem causar recorte ”e outras localizações Você precisa selecionar a visualização / objeto, vá para" Mostrar inspetor de tamanho ", localize a restrição de largura e defina a constante como Maior ou Igual a:
Para corrigir o erro : Falta a restrição à esquerda / direita, que pode causar sobreposição com outras visualizações
Isso significa que a exibição / objeto do Xcode está reclamando, está faltando uma restrição à esquerda ou à direita em uma exibição vizinha.
Enquanto mantém o controle pressionado, arraste para um próximo por vista / objeto
Adicionar uma restrição à esquerda ou à direita
fonte