ios - Visualizações equivocadas cada vez que o Xcode reinicia




objective-c interface-builder (8)

  1. clique para visualizar um arquivo normal (não o arquivo .xib ou .xib )
  2. sair do Xcode
  3. execute o git checkout .
  4. reinicie o Xcode

o arquivo .storyboard não foi modificado agora.

Estou usando storyboards pela primeira vez no meu aplicativo

Quando fecho o Xcode, tenho 0 avisos sobre visualizações perdidas ou qualquer coisa relacionada ao meu storyboard. Quando eu reinicio o Xcode e abro o storyboard, três das minhas 15 cenas têm avisos de exibição perdidos.

Sem tocar em nada (além de selecionar o arquivo), posso emitir um git status e ver se o arquivo .storyboard possui alterações. Se eu git diff , vejo isso incluído em várias áreas do arquivo:

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>

Se um elemento já tiver o nó <variation key="widthClass=Compact" , o atributo misplaced e o nó rect serão adicionados.

A única coisa que tenho que fazer para que os avisos sejam eliminados é clicar em cada um, verifique se "Atualizar quadro" está selecionado e clique em "Corrigir extravio". Isso corrige tudo até eu reiniciar o Xcode.

A estrutura básica da minha cena é:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl

Como impedir que isso aconteça cada vez que reinicio?


Esse problema é causado quando você adiciona restrições que não se ajustam ao tamanho real da tela no tempo de execução. por exemplo: se você tiver um UIButton com largura que exceda a largura da tela (digamos largura 600) e adicionar restrição de largura fixa a esse UIButton, mas sem restrições iniciais ou finais, o Xcode não emitirá avisos, pois não há conflitos, mas quando você realmente executa o aplicativo em um dispositivo ou simulador com largura de tela menor que 600, o Xcode ajustará automaticamente a largura do UIButton para se ajustar à largura da tela menor que 600, fazendo com que as restrições de layout sejam alteradas para o tamanho da tela em tempo de execução


Eu enfrento o mesmo problema antes, e suponho que não é nossa culpa, é apenas um bug do Xcode.

Se o seu arquivo .storyboard mudou, mas você não tocou em nada, basta selecionar o arquivo e selecionar o menu Xcode Source Control -> Discard Changes in "xxxx.storyboard"... , deve funcionar :)


Isso geralmente acontece quando você não definiu as restrições corretamente.

Tente remover todas as visualizações dentro do UIViewController e adicione novamente novamente junto com suas restrições.

Limpe e execute seu código.


No meu caso, isso acontece para todos os rótulos / botões com fontes personalizadas e tamanhos intrínsecos (não definidos explicitamente). Parece um bug do Xcode.


Primeiro, verifique se você implementou todas as restrições. Se todas as restrições estiverem corretas, exclua as restrições relacionadas e refute novamente.


Um motivo possível para visualizações incorretas é: Se você usou visualizações ao vivo (IBDesignables) em storyboards, se você abrir o storyboard e mover rapidamente para outro arquivo antes que o IB termine de construir todas as visualizações ao vivo, as visualizações serão perdidas. O IB começa a criar as visualizações ao vivo assim que você visualiza o storyboard no editor. Para corrigir as visualizações incorretas, aguarde algum tempo para o IB concluir a construção do storyboard permanecendo no storyboard por alguns momentos, e as visualizações perdidas serão corrigidas.


Uma correção simples pode ser simplesmente permitir que o Xcode escolha restrições para você, depois volte e verifique o que ele escolheu para ter certeza de que funcionará para você.

No storyboard:

  • Selecione View Controller dando problemas
  • Resolver problemas de layout automático (canto inferior direito)
  • Vistas selecionadas: Redefinir para restrições sugeridas

Para verificar quais restrições foram redefinidas:

  • Selecione cada vista no controlador
  • Inspetor de restrições (canto superior direito)
  • role para baixo e examine as restrições




autolayout