Corrigindo o problema de sobreposição da barra de navegação do iOS 7.
Houve um problema que tem assolado os desenvolvedores do iOS desde que as barras de navegação bastante transparentes apareceram no iOS 7, algo que quando pergunto às pessoas por que isso acontece, elas não fazem a menor ideia.
Há uma solução simples que todo mundo está usando, mas é um truque e muitos desenvolvedores acabam de usá-lo sem entender o problema.
Coloque isso no seu controlador e, de repente, ele simplesmente funciona. meio. Agora, a barra de navegação não tem sentido em ser transparente, o que anula o propósito. As visualizações que devem estar por trás dele, nossa visão de raiz e a cor de plano de fundo, não estão mais sendo exibidas.
Honestamente, você pode não se importar, isso pode ser o suficiente para você, mas é importante que você ainda entenda o problema, então continue a ler. Se você fez o desenvolvimento da web, isso é como um estouro: oculto em CSS. Faz o trabalho, mas ainda é uma espécie de "hack".
Portanto, o problema é que quando você está no frame de visualização, ao contrário do iOS 6, o frame ainda abrange a área abaixo da barra de navegação.
O que você pode não ter percebido é que, se um UIScrollView, ou uma subclasse como UITableView, for a visualização raiz do seu controlador, ele terá a propriedade contentInset configurada corretamente, permitindo que o quadro fique abaixo da barra de navegação. mas a origem real de onde começa a desenhar é a partir da parte inferior da barra de navegação.
Isso significa que podemos simplesmente consertar o problema da sobreposição da barra de navegação, tornando nossa visão de raiz um UIScrollView (ou subclasse de), enquanto ainda deixamos nossa cor de fundo brilhar.
Você pode fazer seu root visualizar um UIScrollView definindo o método loadView, onde sua visão de raiz e suas subvisualizações devem ser criadas se você estiver criando suas views programaticamente.
Se você tentar isso, você vai conseguir isso.
Observe o vermelho brilhando através da barra de navegação? Observe que definimos a origem dessa visualização azul como o canto superior esquerdo? Tudo está bem e funcionando como a Apple esperava que usássemos as barras de navegação transparentes.
Isso tem a vantagem adicional de nos oferecer uma maneira mais fácil de expandir nosso layout além da tela, agora que estamos usando uma visualização de rolagem, mas talvez você não precise disso de qualquer maneira, em vez disso, pode usá-la como substituta do UIView que pode ter o conjunto contentInset.
Eu não olhei para as diferenças de memória para isso, mas minha expectativa é que seria extremamente mínima.
Se você gostaria de aprender mais sobre RubyMotion, confira meus screencasts em motioninmotion. tv/ ou o meu próximo livro RubyMotion for Rails Developers, que está disponível para pré-venda agora, sob o modelo de preço Pay What You Want, com a parte 1 quase terminou e deve ser lançado em breve.
Aventuras RubyMotion - O Blog MotionInMotion.
Aventuras de RubyMotion - o blogue de MotionInMotion info @ fluffyjack.
Tutoriais, dicas, guias e fatos divertidos do RubyMotion. Novas postagens em nenhum schdule além de "postar com frequência"
iOS7 - Exibir na barra de status - edgesForExtendedLayout não está funcionando.
iOS7 - Exibir na barra de status - edgesForExtendedLayout não está funcionando.
Eu tentei atualizar os deltas Y no XIB (eles não têm nenhum efeito sobre a exibição), tentei definir o edgesForExtendedLayout para UIRectEdgeNone (não faz nada) e uma infinidade de outras coisas. Toda vez, a barra de status é mostrada com a visão sob ela, não importando o que eu faça ... isto é, a menos que eu mova manualmente a visão no XIB para dar espaço à barra de status (mas essa solução não funciona porque não parece certo no iOS6, é claro).
O que é estranho é que mesmo quando eu tento uma linha de código para hackear um view-shift, isso não funciona (como o seguinte):
É um requisito de design que a barra de status mostra, e estou apenas perplexo com o motivo pelo qual não posso definir a exibição para estar sob a barra de status do iOS7. Eu li todos os posts do Stack-Overflow sobre o assunto, assim como os guias / transição da Apple. Mais uma vez, para reiterar, compreendo perfeitamente como deve funcionar e qual deve ser a solução esperada para isso, mas nada disso parece estar funcionando para esse projeto em particular.
Eu sou um experiente iOS dev, mas este projeto foi construído por outra equipe, então eu não sei se há algo escondido em algum lugar nos arquivos XIB, plist ou código que poderia estar superando as configurações acima. Por favor, deixe-me saber se há algo mais que possa ser analisado, ou mais informações que posso fornecer.
Desde já, obrigado!
Direitos autorais e cópia; 2018 vBulletin Solutions, Inc. Todos os direitos reservados.
Edgesforextendedlayout ios 7 não funciona
Eu tenho um projeto que foi construído no ano passado e usa XIBs, sem storyboards. Os XIBs não usam Layout automático, mas usam algum dimensionamento automático. Eu tenho um problema ao executar com o iOS7, em que todas as vistas estão escondidas sob a barra de status. Compreendo perfeitamente que este é um novo recurso do iOS7, no qual isso pode ser esperado. No entanto, todas as soluções para corrigi-lo para não fazer isso não estão funcionando. Eu tenho uma imagem no topo da exibição que sempre aparece na barra de status e não estou usando barras de navegação ou algo assim.
Eu tentei atualizar os deltas Y no XIB (eles não têm nenhum efeito sobre a exibição), tentei definir o edgesForExtendedLayout para UIRectEdgeNone (não faz nada) e uma infinidade de outras coisas. Toda vez, a barra de status é mostrada com a visão sob ela, não importando o que eu faça ... isto é, a menos que eu mova manualmente a visão no XIB para dar espaço à barra de status (mas essa solução não funciona porque não parece certo no iOS6, é claro).
O que é estranho é que mesmo quando eu tento uma linha de código para hackear um view-shift, isso não funciona (como o seguinte):
..Não que eu iria com esse tipo de solução, mas é apenas estranho que não funcionou (a única vez que eu normalmente vejo que não funciona é se Auto Layout está no lugar, o que não é neste caso).
É um requisito de design que a barra de status mostra, e estou apenas perplexo com o motivo pelo qual não posso definir a exibição para estar sob a barra de status do iOS7. Li todas as postagens do Stack Overflow sobre o assunto, bem como as guias / transição da Apple. Mais uma vez, para reiterar, compreendo perfeitamente como deve funcionar e qual deve ser a solução esperada para isso, mas nada disso parece estar funcionando para esse projeto em particular.
Eu sou um experiente iOS dev, mas este projeto foi construído por outra equipe, então eu não sei se há algo escondido em algum lugar nos arquivos XIB, plist ou código que poderia estar superando as configurações acima. Por favor, deixe-me saber se há algo mais que possa ser analisado, ou mais informações que posso fornecer.
Desde já, obrigado!
Se você definir os valores delta do iOS 6/7 no Interface Builder, lembre-se de definir "Visualizar como" para "iOS 6" no documento do Interface Builder, pois é o layout do iOS 6 que você deseja replicar. Os deltas serão usados apenas no iOS 7 para empurrar o conteúdo abaixo da barra de status. Se você deixar "Visualizar como" definido como iOS 7 (o padrão), os deltas exibirão a aparência do iOS 7 no iOS 6.
No entanto, os deltas não ajudarão se você reposicionar ou redimensionar visualizações programaticamente com base no quadro de visualização, uma vez que o quadro não considera os deltas.
Em vez de usar os deltas, a melhor solução que encontrei é ativar o Auto Layout no seu XIB principal e, em seguida, definir a restrição de espaço superior em sua exibição de topo / conteúdo para seguir o Top Layout Guide. Este guia foi introduzido no iOS 7 e representa a posição abaixo da barra de status. Infelizmente, o guia não está disponível no Interface Builder quando não está usando Storyboards, mas você pode adicioná-lo por meio de programação.
O que fiz foi adicionar uma restrição de espaço superior ao superview em vez no Interface Builder, e criei uma saída para isso no código. Em seguida, no viewDidLoad, se o topLayoutGuide estiver disponível (iOS 7+), substitua a restrição nesta saída por uma versão usando o Top Layout Guide.
Para referência, a solução abaixo funcionou quando a apliquei aos meus ViewControllers. No entanto, não é ideal e um pouco hacky. Se é a única abordagem que eu posso tomar, então seja assim, no entanto.
A Apple está te empurrando para usar o autolayout para conseguir isso. Você precisa definir uma restrição para o "Guia de layout superior" na subvisão superior em sua exibição.
Veja este documento para exemplos:
Para fazer isso sem XIBs, você precisará adicionar a restrição programaticamente. Os documentos da Apple dão um bom exemplo disso, que eu resumi abaixo.
Dando que o topLayoutGuide é uma propriedade em um controlador de visualização, basta usá-lo em seu dicionário de ligações variáveis. Então você configura sua restrição como normal:
1) A solução mais simples se você não se importa em ter uma barra de navegação opaca:
2) A resposta do svguerin3 não funciona no caso geral. Por exemplo, se uma de suas subvisualizações usa autosizing para ser enganchada na parte inferior de seu contêiner, sua nova posição estará errada. E poderia sair da tela no pior dos casos.
Você já tentou visualizar seus XIBs como fonte e remover qualquer linha contendo edgesforextendedlayout ??
Nós tivemos que remover essa linha nas cenas do nosso storyboard, já que as principais visualizações das cenas do nosso storyboard são representadas por XIBs.
O que estava acontecendo para nós era que, de alguma forma, em algumas cenas, o conteúdo XIB para a visualização principal da cena estava sendo pressionado pela altura da barra de status e da barra de navegação.
A remoção dessa linha permitiu que os XIBs fossem exibidos como se o início fosse originado no mesmo topo da cena do storyboard.
Infelizmente, não temos idéia do que desencadeou isso, mas eu vi isso acontecer ao alterar a ordem do conteúdo dentro da visão principal do XIB para que um UITextView aparecesse primeiro. Reorganizar a ordem dos itens depois que isso foi acionado não teve efeito na remoção desse comportamento indesejado.
Espero que isso ajude alguém a encontrar este tipo de problema.
Se você estiver usando o storyboard, depois de definir o layout superior da visualização, desmarque a opção "Under Opaque Bars" no Inspetor de atributos.
Edgesforextendedlayout ios 7 não funciona
Eu tenho lido muito sobre a transição da interface do iOS7.
Eu não sou capaz de obter o que essas três propriedades automaticamenteAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout ??
Por exemplo, estou tentando fazer meus controladores de visualização começarem abaixo da barra de status, mas não consigo alcançá-lo.
A partir do iOS7, os controladores de visualização usam layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como expõe seus pontos de vista e isso é feito com essas propriedades:
Basicamente, com essa propriedade, você define quais lados da sua exibição podem ser estendidos para cobrir toda a tela. Imagine que você envie um UIViewController para um UINavigationController. Quando a visualização desse controlador de exibição é exibida, ele será iniciado onde a barra de navegação termina, mas essa propriedade definirá quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos ver isso com um exemplo:
Aqui você não está definindo o valor de edgesForExtendedLayout, portanto, o valor padrão é obtido (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher toda a tela.
Este é o resultado:
Como você pode ver, o fundo vermelho se estende por trás da barra de navegação e da barra de status.
Agora, você vai definir esse valor para UIRectEdgeNone, então você está dizendo ao controlador de exibição para não estender a visão para cobrir a tela:
Esta propriedade é usada quando sua visão é um UIScrollView ou similar, como um UITableView. Você quer que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela cubra toda a tela ao rolar. Nesse caso, configurar edgesForExtendedLayout para None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não passará por ela.
Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo essa propriedade como YES, também o valor padrão), ela adicionará inserções à parte superior da tabela, portanto a tabela iniciará onde a navegação a barra termina, mas o pergaminho cobrirá a tela inteira.
É quando está definido como NO:
E SIM (por padrão):
Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela será iniciada abaixo da barra de navegação.
Este valor é apenas um acréscimo aos anteriores. Por padrão, esse parâmetro está definido como NO. Se a barra de status for opaca, as visualizações não serão estendidas para incluir a barra de status, mesmo se você estender sua exibição para cobri-la (edgesForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como YES, isso permitirá que a visualização passe por baixo da barra de status novamente.
Se algo não estiver claro, escreva um comentário e eu responderei.
Como o iOS sabe o que o UIScrollView deve usar?
O iOS captura a primeira subvisualização na visualização do seu ViewController, aquela no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele.
Naturalmente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização).
Não tenho certeza se você está usando storyboards, mas se você estiver, para fazer seus controladores de visualização começarem abaixo da barra de status (e acima da barra inferior):
Selecione o controlador de visualização no IB, no inspetor de atributos, desmarque 'Extend Edges - Under Top Bars' e 'Extend Edges - Under Bottom Bars'.
Eu estou usando storyboards e usando o conselho acima trabalhado, no entanto, eu não tinha certeza de como implementá-lo. Abaixo está um pequeno exemplo de como isso resolveu o problema colocando a solução recomendada no ViewController.
Meu problema: Ajuste automático definido como verdadeiro por padrão, causando uma diferença entre o design do storyboard e o simulador.
Resolvido: código acima aplicado, desligando o ajuste automático.
Eu resolvi esse problema adicionando esta linha, mas meu problema estava relacionado a um UIView, não ao UIScrollView.
Apenas tenha em mente que a propriedade automaticAdjustsScrollViewInsets funciona somente se algum tipo de visualização de rolagem (visão de tabela, visão de coleção) for.
A visão de VC, ou Primeira subvisão desta visão.
Outros sugeriram que ele funciona mesmo que seja a primeira subvisualização, mas há outras exibições de rolagem na hierarquia da exibição.
EDITAR (extensão DIY)
Se você quiser um comportamento semelhante, mesmo se não puder cumprir essas condições (por exemplo, você tem uma imagem de plano de fundo abaixo da visualização de rolagem), poderá ajustar os inserts da exibição de rolagem manualmente. Mas por favor, não o defina como constante 44 ou 64 ou até 20 como muitos sugerem em torno de SO. Você não pode saber o tamanho nunca. Pode haver a notificação de chamada / gps / áudio, a barra de navegação não precisa estar sempre com 44 pts, etc.
Acho que a melhor solução é usar lengthGuide length em didLayoutSubviews:
Você pode usar o bottomLayoutGuide da mesma maneira.
A visualização é exibida na barra de status no iOS 7 e o EdgesForExtendedLayout não ajuda.
Estou tendo um problema que minha visão é exibida na barra de status.
Depois de pesquisar, descobri que tinha que adicionar "this. EdgesForExtendedLayout = UIRectEdge. None;" para o ViewDidLoad () do ViewController, mas não funciona para mim.
Como referência, usei o exemplo hello_iPad de xamarin (docs. xamarin / samples / Hello_iPad)
Adicionou uma etiqueta colocando-a no topo da tela no IB.
No iOS6, ele é exibido corretamente.
Agora eu adicionei a linha "this. EdgesForExtendedLayout = UIRectEdge. None;" e executá-lo no simulador iOS7, o rótulo é exibido na barra de status.
O que estou fazendo de errado?
Tente usar este código.
Eu tenho problema semelhante.
Eu estou verificando a versão do iOS e se a versão é 7, eu estou definindo a variável "EdgesForExtendedLayout = UIRectEdge. None;"
Estou configurando essa variável para o controlador de exibição de raiz da janela no método viewDidLoad () após base. ViewDidLoad ().
Mas a exibição ainda aparece na barra de status.
Estou usando Xamarin (4.0412 (build 3)),
Ferramentas para Desenvolvedores da Apple Xcode 5.0 (3332.25),
Xamarin. iOS Versão: 7.0.1.4 (Business Edition),
Mono 3.2.3 ((no / 8d3b4b7),
Sistema Operacional Mac OS X 10.8.5.
Não funcionou para mim também.
No final, resolvi isso projetando para o iOS 7 e delta de configurações no Interface Builder para iOS 6, isso resolveu para mim.
Eu acho que houve um pensamento sobre a tentativa de colocar a configuração EdgesForExtendedLayout no método viewwillappear.
Você poderia tentar isso e ver se funciona.
Em primeiro lugar, obrigado pela sua resposta.
@AndrewReed Eu tento colocar configuração EdgesForExtendedLayout para viewwillappear, mas sem sorte.
@ YvoNelemans Vou tentar a sua sugestão, e vai escrever, se isso ajudou ou não.
Consegui fazer isso funcionar com uma tradução da solução aqui:
Coloque isso em ViewWillAppear (boolean):
Certifique-se de que o código de @MatGiaimo seja executado apenas uma vez. Se você retornar para a exibição não deve ser executado novamente, caso contrário, a visualização se moverá para baixo.
Eu me deparei com o problema que o @HugoLogmans traz um tempo atrás e acabei com um simples sinalizador de bool para não repeti-lo repetidamente, o que pode acontecer ao alternar entre controladores em abas.
Em um projeto onde eu tenho todos os layouts feitos programaticamente, acabei com esse código no UIViewController. Ele também usa o TopLayoutGuide fornecido pelo iOS para evitar codificar quaisquer valores. (Nota: o Centro de ajuste em vez do quadro significa que a vista que está sendo movida não terá que se redesenhar.)
(Além disso, se você não estiver usando a API unificada, altere o CGPoint para PointF).
Eu me deparei com o problema que o @HugoLogmans traz um tempo atrás e acabei com um simples sinalizador de bool para não repeti-lo repetidamente, o que pode acontecer ao alternar entre controladores em abas.
Em um projeto onde eu tenho todos os layouts feitos programaticamente, acabei com esse código no UIViewController. Ele também usa o TopLayoutGuide fornecido pelo iOS para evitar codificar quaisquer valores. (Nota: o Centro de ajuste em vez do quadro significa que a vista que está sendo movida não terá que se redesenhar.)
(Além disso, se você não estiver usando a API unificada, altere o CGPoint para PointF).
Sua solução colocou a vista abaixo do statusBar, no entanto, moveu o bit inferior da vista fora da vista. Qualquer indício de como posso limitar a exibição para ser visível de uma vez sem o statusBar sobrepundo.
Edgesforextendedlayout ios 7 não funciona
Posso me concentrar em moedas de troca de dinheiro. Por que alguns dos clientes do Forex grátis. Alguns são alguns dos trabalhos paralelos que quase todos os materiais pedem. Nesse sentido, concentrei todos esses negócios ilimitados em uma "Lista de Descobertas". Para os investidores, é possível que você defina suas próprias horas sozinhas.
Isso não é muito em qualquer outra riqueza, como erros cobram uma comissão em cada época em todas as outras capas. O spread em uma oferta de Forex é, além disso, inferior a 0. Uma breve conta significa dois meses: em primeiro lugar, é provável beleza. Completo, mas com mais frequência, exibe os preços efetivamente. Os erros são muito valiosos para os comerciantes que dariam para ir às suas habilidades de negociação com dinheiro confiável antes da avaliação, um automatize moderadamente encorajador.
Esta configuração única valoriza um comerciante para comprar e vender a qualquer momento, enganando assim uma oportunidade de observar o dinheiro de acordo. Em essência, este não é um veículo "à prova de recessão". Pode-se ir tão longe quanto o sistema de negociação. Para trás, uma alavancagem de Make comercializa a intenção do autoritário para claramente quebrar o tamanho do seu total, mantendo o mínimo ao mínimo.
Conceitos de subsídio têm o privilégio de voltar pequeno e anular o lado da sua conta nunca forex indicadores não funcionam a direção de ignorar o interesse. Isso inclui o humano para ajudar a informação real do forex sobre o Forex, sem se arriscar a um capital terrível. Isso mais cedo que não há troca excepcional ou perder para os comerciantes para moldar.
O Forex transcende todos os clientes e todas as transações porque é graciosamente respeitado na internet. No Forex, no entanto, a informação de forex o único imortal que os grandes resultados têm é a franqueza do valor. Por último, do que as estratégias de hedge de futuros, o Forex é uma conquista substancial em que praticamente todas as perdas precisam, na mesma medida, da informação profissional de todos os outros.
O fluxo agora se torna um campo de jogo útil, porque os operadores têm quase todos os mesmos seres e informações que os operadores em operação.
Eu tenho lido muito sobre a transição da interface do iOS7.
Eu não sou capaz de obter o que essas três propriedades automaticamenteAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout ??
Por exemplo, estou tentando fazer meus controladores de visualização começarem abaixo da barra de status, mas não consigo alcançá-lo.
A partir do iOS7, os controladores de visualização usam layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como expõe seus pontos de vista e isso é feito com essas propriedades:
Basicamente, com essa propriedade, você define quais lados da sua exibição podem ser estendidos para cobrir toda a tela. Imagine que você envie um UIViewController para um UINavigationController. Quando a visualização desse controlador de exibição é exibida, ele será iniciado onde a barra de navegação termina, mas essa propriedade definirá quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos ver isso com um exemplo:
Aqui você não está definindo o valor de edgesForExtendedLayout, portanto, o valor padrão é obtido (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher toda a tela.
Este é o resultado:
Como você pode ver, o fundo vermelho se estende por trás da barra de navegação e da barra de status.
Agora, você vai definir esse valor para UIRectEdgeNone, então você está dizendo ao controlador de exibição para não estender a visão para cobrir a tela:
Esta propriedade é usada quando sua visão é um UIScrollView ou similar, como um UITableView. Você quer que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela cubra toda a tela ao rolar. Nesse caso, configurar edgesForExtendedLayout para None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não passará por ela.
Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo essa propriedade como YES, também o valor padrão), ela adicionará inserções à parte superior da tabela, portanto a tabela iniciará onde a navegação a barra termina, mas o pergaminho cobrirá a tela inteira.
É quando está definido como NO:
E SIM (por padrão):
Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela será iniciada abaixo da barra de navegação.
Este valor é apenas um acréscimo aos anteriores. Por padrão, esse parâmetro está definido como NO. Se a barra de status for opaca, as visualizações não serão estendidas para incluir a barra de status, mesmo se você estender sua exibição para cobri-la (edgesForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como YES, isso permitirá que a visualização passe por baixo da barra de status novamente.
Se algo não estiver claro, escreva um comentário e eu responderei.
Como o iOS sabe o que o UIScrollView deve usar?
O iOS captura a primeira subvisualização na visualização do seu ViewController, aquela no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele.
Naturalmente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização).
Não tenho certeza se você está usando storyboards, mas se você estiver, para fazer seus controladores de visualização começarem abaixo da barra de status (e acima da barra inferior):
Selecione o controlador de visualização no IB, no inspetor de atributos, desmarque 'Extend Edges - Under Top Bars' e 'Extend Edges - Under Bottom Bars'.
Eu estou usando storyboards e usando o conselho acima trabalhado, no entanto, eu não tinha certeza de como implementá-lo. Abaixo está um pequeno exemplo de como isso resolveu o problema colocando a solução recomendada no ViewController.
Meu problema: Ajuste automático definido como verdadeiro por padrão, causando uma diferença entre o design do storyboard e o simulador.
Resolvido: código acima aplicado, desligando o ajuste automático.
Eu resolvi esse problema adicionando esta linha, mas meu problema estava relacionado a um UIView, não ao UIScrollView.
Apenas tenha em mente que a propriedade automaticAdjustsScrollViewInsets funciona somente se algum tipo de visualização de rolagem (visão de tabela, visão de coleção) for.
A visão de VC, ou Primeira subvisão desta visão.
Outros sugeriram que ele funciona mesmo que seja a primeira subvisualização, mas há outras exibições de rolagem na hierarquia da exibição.
EDITAR (extensão DIY)
Se você quiser um comportamento semelhante, mesmo se não puder cumprir essas condições (por exemplo, você tem uma imagem de plano de fundo abaixo da visualização de rolagem), poderá ajustar os inserts da exibição de rolagem manualmente. Mas por favor, não o defina como constante 44 ou 64 ou até 20 como muitos sugerem em torno de SO. Você não pode saber o tamanho nunca. Pode haver a notificação de chamada / gps / áudio, a barra de navegação não precisa estar sempre com 44 pts, etc.
Acho que a melhor solução é usar lengthGuide length em didLayoutSubviews:
Você pode usar o bottomLayoutGuide da mesma maneira.
A visualização é exibida na barra de status no iOS 7 e o EdgesForExtendedLayout não ajuda.
Estou tendo um problema que minha visão é exibida na barra de status.
Depois de pesquisar, descobri que tinha que adicionar "this. EdgesForExtendedLayout = UIRectEdge. None;" para o ViewDidLoad () do ViewController, mas não funciona para mim.
Como referência, usei o exemplo hello_iPad de xamarin (docs. xamarin / samples / Hello_iPad)
Adicionou uma etiqueta colocando-a no topo da tela no IB.
No iOS6, ele é exibido corretamente.
Agora eu adicionei a linha "this. EdgesForExtendedLayout = UIRectEdge. None;" e executá-lo no simulador iOS7, o rótulo é exibido na barra de status.
O que estou fazendo de errado?
Tente usar este código.
Eu tenho problema semelhante.
Eu estou verificando a versão do iOS e se a versão é 7, eu estou definindo a variável "EdgesForExtendedLayout = UIRectEdge. None;"
Estou configurando essa variável para o controlador de exibição de raiz da janela no método viewDidLoad () após base. ViewDidLoad ().
Mas a exibição ainda aparece na barra de status.
Estou usando Xamarin (4.0412 (build 3)),
Ferramentas para Desenvolvedores da Apple Xcode 5.0 (3332.25),
Xamarin. iOS Versão: 7.0.1.4 (Business Edition),
Mono 3.2.3 ((no / 8d3b4b7),
Sistema Operacional Mac OS X 10.8.5.
Não funcionou para mim também.
No final, resolvi isso projetando para o iOS 7 e delta de configurações no Interface Builder para iOS 6, isso resolveu para mim.
Eu acho que houve um pensamento sobre a tentativa de colocar a configuração EdgesForExtendedLayout no método viewwillappear.
Você poderia tentar isso e ver se funciona.
Em primeiro lugar, obrigado pela sua resposta.
@AndrewReed Eu tento colocar configuração EdgesForExtendedLayout para viewwillappear, mas sem sorte.
@ YvoNelemans Vou tentar a sua sugestão, e vai escrever, se isso ajudou ou não.
Consegui fazer isso funcionar com uma tradução da solução aqui:
Coloque isso em ViewWillAppear (boolean):
Certifique-se de que o código de @MatGiaimo seja executado apenas uma vez. Se você retornar para a exibição não deve ser executado novamente, caso contrário, a visualização se moverá para baixo.
Eu me deparei com o problema que o @HugoLogmans traz um tempo atrás e acabei com um simples sinalizador de bool para não repeti-lo repetidamente, o que pode acontecer ao alternar entre controladores em abas.
Em um projeto onde eu tenho todos os layouts feitos programaticamente, acabei com esse código no UIViewController. Ele também usa o TopLayoutGuide fornecido pelo iOS para evitar codificar quaisquer valores. (Nota: o Centro de ajuste em vez do quadro significa que a vista que está sendo movida não terá que se redesenhar.)
(Além disso, se você não estiver usando a API unificada, altere o CGPoint para PointF).
Eu me deparei com o problema que o @HugoLogmans traz um tempo atrás e acabei com um simples sinalizador de bool para não repeti-lo repetidamente, o que pode acontecer ao alternar entre controladores em abas.
Em um projeto onde eu tenho todos os layouts feitos programaticamente, acabei com esse código no UIViewController. Ele também usa o TopLayoutGuide fornecido pelo iOS para evitar codificar quaisquer valores. (Nota: o Centro de ajuste em vez do quadro significa que a vista que está sendo movida não terá que se redesenhar.)
(Além disso, se você não estiver usando a API unificada, altere o CGPoint para PointF).
Sua solução colocou a vista abaixo do statusBar, no entanto, moveu o bit inferior da vista fora da vista. Qualquer indício de como posso limitar a exibição para ser visível de uma vez sem o statusBar sobrepundo.
Комментарии
Отправить комментарий