No momento, estou migrando meu aplicativo no ios 7 e estou parado há horas no novo controlador de barra de navegação / gerenciamento.
Antes, quando tínhamos um controlador de navegação, tínhamos um trecho como este:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
No criador de interface, tivemos a opção de definir uma barra de navegação existente para a visualização e tudo corresponder ao conteúdo da visualização real.
OK, então agora, eu não tenho idéia de como projetar corretamente com o construtor de interface. Ainda tenho meu snippet para inicializar meu navegador. No entanto, no construtor de interface do meu MainViewController, se eu definir uma barra de status como barra de navegação translúcida ou opaca, tenho um deslocamento de 44px na parte superior (veja abaixo).
Interface Builder_________________________E o resultado
Agora, se eu definir a barra de status como nenhuma, não haverá deslocamento na parte superior, mas como a exibição no simulador é menor por causa da barra de navegação, a parte inferior da exibição no criador de interfaces é cortada.
Interface Builder_________________________E o resultado
Acho que realmente estou perdendo alguma coisa aqui, mas não consigo encontrar nenhum tópico ou informação da maçã no iOS7 Transitions Guide sobre isso.
Obrigado pela ajuda
EDITAR
Como podemos ver nas fotos, o primeiro filho da visualização é um UIScrollView que contém os dois rótulos, o problema não aparece quando não há visualização de rolagem. Também aparece se for um UITableView. Se um rótulo estiver fora do UIScrollView, não haverá deslocamento para esse rótulo.
Respostas:
OK, então eu encontrei a solução, eu configurei no meu controlador a propriedade:
Eu realmente não entendo o verdadeiro benefício dessa propriedade (ou por que o valor padrão é verdadeiro)
A única documentação que encontrei estava lá:
Atualizar
No iOS 11
automaticallyAdjustsScrollViewInsets
está obsoletoAgora você deve usar:
Também o incentivo a verificar esta pergunta e sua resposta para entender melhor essas propriedades
fonte
UIScrollView
rolagem seja executada. Mas sem isso não posso me livrar da compensação. Weired ...A resposta de @ Justafinger também funcionou como um encanto para mim.
Só queria acrescentar que essa configuração também pode ser ajustada facilmente a partir do construtor de interface.
fonte
Eu estava com esse mesmo problema, mas encontrei uma propriedade bastante estranha no ViewController no construtor de interfaces que parece estar causando isso para mim. Há um conjunto de caixas de seleção "Estender arestas". Eu removi a verificação "Under Top Bars" e tudo começou a ficar bem definido para mim.
fonte
Com o AutomaticAdjustsScrollViewInsets definido como YES (a configuração padrão), há uma incompatibilidade no posicionamento da visualização de rolagem entre o ios6 e o ios7; portanto, para torná-los consistentes, é necessário desativar essa configuração. No entanto, o ios6 falhará se aparecer automaticamenteAdjustsScrollViewInsets, portanto, você precisará fazer uma alteração programática de automaticamenteAdjustsScrollViewInsets condicional no ios7 ou desativar a opção usando o storyboard / NIB
fonte
Eu tive um problema semelhante, depois de descartar um viewController, o contentOffset do meu tableView foi alterado para (0, -64).
minha solução foi um pouco estranha, tentei todas as outras respostas, mas não obtive sucesso, a única coisa que resolveu meu problema foi mudar a posição do tableView na árvore de controles do .xib
foi o primeiro controle na exibição pai assim:
Mudei o tableView logo após o ImageView e funcionou:
parece que colocar a vista da mesa na primeira posição estava causando o problema, e mover a vista da mesa para outra posição resolveu o problema.
PD Não estou usando autoLayout nem storyboards
espero que isso possa ajudar alguém!
fonte
Eu também enfrento esse problema.
UIScrollView
o tamanho do conteúdo é calculado pelo SO como outros tamanhos, origens fornecidas pelo sistema de restrição - é por isso que o SO tem dúvidas.Como corrigir - Você deve definir explicitamente o tamanho do conteúdo de
UIScrollView
:UIView
(eu o renomeio paraContentView
)ContentView.Weight = View.Weight
eContentView.Height = View.Height
fonte
Parece que uma solução alternativa é exibir o arquivo do storyboard como "iOS 6.1 e anterior" (selecione o arquivo do storyboard-> Inspetor de arquivos-> Documento do Interface Builder-> Exibir como. As sub-visualizações de posicionamento neste modo mostram o deslocamento.
fonte
Obrigado a vocês pelas soluções! Eu lutei por horas tentando resolver o problema. Tudo estava bem quando não havia nenhuma Barra de Navegação envolvida, mas ele foi mal no momento em que incorporei o ViewController em um NavigationController.
Eu o resolvi desmarcando as opções Inserir exibição de rolagem e as Barras inferiores . Ambos estão localizados no Inspetor de atributos do ViewController. Graças um milhão!
fonte