A vista é exibida na barra de status no iOS 7 e 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 um problema semelhante.
Estou checando a versão do iOS e se a versão for 7, eu estou configurando 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 o Xamarin (4.0412 (build 3)),
Apple Developer Tools 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.
Isso também não funcionou para mim.
No final, eu resolvi projetando para iOS 7 e configurações delta's no Interface Builder para iOS 6, isso resolveu para mim.
Eu acho que pensou em tentar colocar a configuração EdgesForExtendedLayout no método viewwillappear.
Você poderia tentar isso e ver se isso funciona.
Em primeiro lugar, obrigado pela sua resposta.
AndrewReed eu tento colocar EdgesForExtendedLayout configuração para viewwillappear, mas sem sorte.
YvoNelemans vou tentar a sua sugestão, e irá escrever, se isso ajudou ou não.
Consegui trabalhar com uma tradução da solução aqui:
Coloque isso em ViewWillAppear (boolean):
Verifique se o código da MatGiaimo só foi executado 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 corri para o problema que HugoLogmans traz há um tempo atrás e acabou com uma simples bandeira de bool para evitar fazê-lo repetidamente, o que pode acontecer ao alternar entre controladores em guias.
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 a codificação de todos os 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 corri para o problema que HugoLogmans traz há um tempo atrás e acabou com uma simples bandeira de bool para evitar fazê-lo repetidamente, o que pode acontecer ao alternar entre controladores em guias.
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 a codificação de todos os 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.
bordas para layout estendido.
As bordas que você estende para seu controlador de exibição.
Declaração.
Discussão.
Em vez dessa propriedade, use a área segura da sua visão para determinar quais partes da sua interface estão ocluídas por outros conteúdos. Para obter mais informações, consulte o Guia de Layout de área seguro e as propriedades seguras da Área de inserções do UIView.
No iOS 10 e anterior, use esta propriedade para informar quais bordas do seu controlador de exibição se estendem por baixo das barras de navegação ou outras exibições fornecidas pelo sistema. O valor padrão dessa propriedade é tudo, e é recomendável que você não altere esse valor.
Se você remover um valor de borda dessa propriedade, o sistema não apresenta seu conteúdo por baixo de outras barras na mesma borda. Além disso, o sistema fornece um fundo padrão para que as barras translúcidas tenham uma aparência apropriada. O controlador de visualização raiz da janela não reage a essa propriedade.
Configurando o Comportamento de Layout da Visualização.
Um valor booleano que indica se o layout estendido inclui barras opacas.
Chamado a notificar o controlador de visualização de que sua exibição está prestes a criar suas sub-apresentações.
Chamado a notificar o controlador de visualização que a sua visão acabou de arquivar suas submissões.
Chamado quando a visão do controlador de exibição # ™27 precisa atualizar suas restrições.
Edgesforextendedlayout ios 7
Obter através da App Store Leia esta publicação em nosso aplicativo!
iOS7 - Exibir sob a barra de status - edgeForExtendedLayout não está funcionando.
Eu tenho um projeto que foi construído no ano passado, e usa XIBs, sem storyboards. Os XIBs não usam o Layout Automático, mas eles usam algum Autosizing. Tenho um problema ao correr com o iOS7, em que todas as visualizações estão dobradas na barra de status. Compreendo perfeitamente, isso é um novo recurso com o 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 mostra sob a barra de status, e não estou usando barras de navegação ou algo assim.
Eu tentei atualizar os Y-deltas no XIB (eles não têm efeito na visualização), tentei configurar as bordasForExtendedLayout para UIRectEdgeNone (não faz nada) e uma infinidade de outras coisas. Toda vez, a barra de status mostra com a vista escondida sob isso, não importa o que eu faça ... isso é, a menos que eu mova manualmente para baixo a vista no XIB para permitir espaço para a barra de status (mas essa solução não funciona porque ela não parece direito no iOS6, é claro).
O que é estranho é que, mesmo quando eu tento uma linha de código para cortar em um turno de exibição, isso não funciona (como o seguinte):
.. Não é que eu iria com esse tipo de solução, mas é estranho que não funcionasse (a única vez que eu normalmente vejo que não funciona é se o Layout Automático estiver no lugar, o que não é neste caso).
É um requisito de design que a barra de status mostra, e estou apenas perplexo porque não consigo configurar a exibição para estar sob a barra de status do iOS7. Eu li todas as postagens de Depuração de Pilha no assunto, bem como a transição / guias da Apple. Mais uma vez, para reiterar, compreendo perfeitamente como deve funcionar e qual a solução esperada para isso, mas nada disso parece estar funcionando para esse projeto específico.
Eu sou um desenvolvedor experiente de iOS, mas esse projeto foi construído por outra equipe, então não sei se há algo escondido em algum lugar nos arquivos XIB, plist ou código que possam estar superando as configurações acima. Por favor, deixe-me saber se há algo mais que pode ser consultado sobre isso, 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 configurar "Ver como" para "iOS 6" no Documento do Builder da interface, já que é o layout do iOS 6 que deseja replicar. Os deltas serão então usados apenas no iOS 7 para empurrar o conteúdo abaixo da barra de status. Se você deixar o "Ver como" configurado para o iOS 7 (o padrão), os deltas, em vez disso, oferecerão o iOS 7 no iOS 6.
No entanto, os deltas não irão ajudá-lo se você reposicionar ou redimensionar visualizações de forma programática com base no quadro de exibição, já que o quadro não é responsável pelos deltas.
Em vez de usar os deltas, a melhor solução que encontrei é habilitar o Layout Automático em seu XIB principal e, em seguida, definir a restrição de espaço superior na sua visualização superior / conteúdo para seguir o Guia de Layout Superior. 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 estiver usando Storyboards, mas você pode adicioná-lo de forma programática.
O que eu fiz foi adicionar uma restrição de espaço superior ao superview em vez do Interface Builder e crie uma saída para isso no código. Então, no viewDidLoad, se o TopLayoutGuide estiver disponível (iOS 7+), substitua a restrição nesta saída por uma versão usando o Guia de Layout Superior.
Para referência, a solução abaixo funcionou quando eu apliquei no meu ViewControllers. No entanto, não é ideal e um pouco complicado. Se é a única abordagem que eu posso tomar, então seja assim.
A Apple está empurrando você para usar o autolayout para realizar isso. Você precisa definir uma restrição no "Guia de Layout Superior" da subvista superior em sua exibição.
Veja este documento por exemplo:
Para fazer isso sem XIB, 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 exibição, você apenas usa no 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 importar com uma barra de navegação opaca:
2) A resposta do svguerin3 não pode funcionar no caso geral. Por exemplo, se uma das suas sub-visualizações usar autosizing para ser enganchado na parte inferior do seu contêiner, sua nova posição será errada. E poderia sair da tela no pior caso.
Você tentou visualizar seus XIBs como fonte e remover qualquer linha que contenha bordas antes da extensão?
Tivemos que remover esta linha nas cenas do nosso storyboard, já que as visões principais das cenas do 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 visão principal da cena estava sendo pressionado pelo alto da barra de status e da barra de navegação.
A remoção dessa linha permitiu que os XIBs fossem exibidos como se o seu topo se tivesse originado na mesma parte superior da cena do storyboard.
Infelizmente, não temos idéia do que desencadeou isso, mas eu vi isso acontecer ao mudar a ordem do conteúdo dentro da visão principal do XIB de modo que um UITextView apareceu primeiro. Reorganizar a ordem dos itens depois disso foi desencadeada não teve efeito na remoção desse comportamento indesejado.
Espero que isso ajude qualquer outra pessoa a correr para este tipo de problema.
Se você estiver usando o storyboard, depois de configurar o layout superior da sua visão, você pode desmarcar as barras "Under Opaque" no Inspetor de atributos.
Edgesforextendedlayout ios 7
Obter através da App Store Leia esta publicação em nosso aplicativo!
Explicando a diferença entre automaticAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout no iOS7.
Eu tenho lido muito sobre a transição do IOS7 UI.
Não consigo obter o que estas três propriedades automaticamenteAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout ??
Por exemplo, estou tentando fazer meus controladores de exibição começar abaixo da barra de status, mas não consigo alcançá-lo.
Começando no iOS7, os controladores de exibição usam o layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como ele expõe seus pontos de vista, e isso é feito com essas propriedades:
Basicamente, com esta propriedade, você define quais lados da sua visão podem ser estendidos para cobrir toda a tela. Imagine que você empurre um UIViewController para um UINavigationController. Quando a exibição desse controlador de visualização é estabelecida, ele iniciará onde a barra de navegação termina, mas essa propriedade irá definir quais lados da vista (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos vê-lo com um exemplo:
Aqui você não está configurando o valor de edgesForExtendedLayout, portanto, o valor padrão é tomado (UIRectEdgeAll), então a exibição amplia 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 exibição para cobrir a tela:
Essa propriedade é usada quando sua exibição é UIScrollView ou similar, como um UITableView. Você quer que sua mesa 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ê deseja que sua mesa cubra toda a tela quando se desloca. Nesse caso, a definição de bordasForExtendedLayout para Nenhum não funcionará porque sua tabela começará a rolar onde a barra de navegação termina e não vai atrasá-la.
Aqui é onde esta propriedade é útil, se você deixar o controlador de exibição ajustar automaticamente as inserções (configurando esta propriedade para SIM, também o valor padrão), ele irá adicionar inserções no topo da tabela, então a tabela começará onde a navegação A barra termina, mas o pergaminho cobrirá toda a tela.
É quando é definido como NÃO:
E SIM (por padrão):
Em ambos os casos, a tabela se desliza para trás da barra de navegação, mas no segundo caso (SIM), ele irá começar por baixo da barra de navegação.
Esse valor é apenas uma adição aos anteriores. Por padrão, esse parâmetro é 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 visão para cobri-la (edgeForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como SIM, isso permitirá que a visão vá novamente debaixo da barra de status.
Se algo não estiver claro, escreva um comentário e vou responder.
Como o iOS sabe o que o UIScrollView usa?
O iOS agarra a primeira sub-visualização na visão do ViewController, a do índice 0, e se é uma subclasse do UIScrollView, então aplica as propriedades explicadas a ela.
Claro, isso significa que o UITableViewController funciona por padrão (uma vez que o UITableView é a primeira visualização).
Não tenho certeza se você está usando storyboards, mas se você for, para fazer seus controladores de exibiçã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 'Extendir bordas - Em barras superiores' e 'Ampliar bordas - em barras inferiores'.
Estou usando storyboards e usando o conselho acima, no entanto, não sabia exatamente como implementá-lo. Abaixo está um pequeno exemplo no modo como ele esclareceu o problema colocando a solução recomendada no ViewController.
Meu Problema: Auto Adjust definido como true 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.
Resolvi esse problema ao adicionar esta linha, mas meu problema estava relacionado a um UIView, não ao UIScrollView.
Basta ter em mente que a propriedade AutomaticAdjustsScrollViewInsets funciona somente se algum tipo de exibição de rolagem (exibição de tabela, exibição de coleção) for.
A visão do VC, ou Primeira subvisão desta visão.
Outro sugerido, que ele funciona, mesmo que seja a primeira subvisão, mas existem outras visualizações de rolagem na hierarquia de exibição.
EDITAR (extensão DIY)
Se você quiser um comportamento semelhante mesmo que não possa cumprir essas condições (por exemplo, você tem uma imagem de fundo abaixo da visualização de rolagem), você pode ajustar manualmente as inserções de exibição de rolagem. Mas, por favor, não configurá-lo como constante, como 44 ou 64 ou mesmo 20 como muitos sugerem em torno de SO. Você não pode conhecer o tamanho de todos. Pode haver notificação de incall / gps / audio, a barra de navegação não precisa estar sempre 44 pts, etc.
Eu acho que a melhor solução é usar o comprimento layoutGuide em didLayoutSubviews:
Você pode usar o guia bottomLayout da mesma maneira.
Obter através da App Store Leia esta publicação em nosso aplicativo!
Explicando a diferença entre automaticAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout no iOS7.
Eu tenho lido muito sobre a transição do IOS7 UI.
Não consigo obter o que estas três propriedades automaticamenteAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout ??
Por exemplo, estou tentando fazer meus controladores de exibição começar abaixo da barra de status, mas não consigo alcançá-lo.
Começando no iOS7, os controladores de exibição usam o layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como ele expõe seus pontos de vista, e isso é feito com essas propriedades:
Basicamente, com esta propriedade, você define quais lados da sua visão podem ser estendidos para cobrir toda a tela. Imagine que você empurre um UIViewController para um UINavigationController. Quando a exibição desse controlador de visualização é estabelecida, ele iniciará onde a barra de navegação termina, mas essa propriedade irá definir quais lados da vista (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos vê-lo com um exemplo:
Aqui você não está configurando o valor de edgesForExtendedLayout, portanto, o valor padrão é tomado (UIRectEdgeAll), então a exibição amplia 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 exibição para cobrir a tela:
Essa propriedade é usada quando sua exibição é UIScrollView ou similar, como um UITableView. Você quer que sua mesa 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ê deseja que sua mesa cubra toda a tela quando se desloca. Nesse caso, a definição de bordasForExtendedLayout para Nenhum não funcionará porque sua tabela começará a rolar onde a barra de navegação termina e não vai atrasá-la.
Aqui é onde esta propriedade é útil, se você deixar o controlador de exibição ajustar automaticamente as inserções (configurando esta propriedade para SIM, também o valor padrão), ele irá adicionar inserções no topo da tabela, então a tabela começará onde a navegação A barra termina, mas o pergaminho cobrirá toda a tela.
É quando é definido como NÃO:
E SIM (por padrão):
Em ambos os casos, a tabela se desliza para trás da barra de navegação, mas no segundo caso (SIM), ele irá começar por baixo da barra de navegação.
Esse valor é apenas uma adição aos anteriores. Por padrão, esse parâmetro é 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 visão para cobri-la (edgeForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como SIM, isso permitirá que a visão vá novamente debaixo da barra de status.
Se algo não estiver claro, escreva um comentário e vou responder.
Como o iOS sabe o que o UIScrollView usa?
O iOS agarra a primeira sub-visualização na visão do ViewController, a do índice 0, e se é uma subclasse do UIScrollView, então aplica as propriedades explicadas a ela.
Claro, isso significa que o UITableViewController funciona por padrão (uma vez que o UITableView é a primeira visualização).
Não tenho certeza se você está usando storyboards, mas se você for, para fazer seus controladores de exibiçã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 'Extendir bordas - Em barras superiores' e 'Ampliar bordas - em barras inferiores'.
Estou usando storyboards e usando o conselho acima, no entanto, não sabia exatamente como implementá-lo. Abaixo está um pequeno exemplo no modo como ele esclareceu o problema colocando a solução recomendada no ViewController.
Meu Problema: Auto Adjust definido como true 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.
Resolvi esse problema ao adicionar esta linha, mas meu problema estava relacionado a um UIView, não ao UIScrollView.
Basta ter em mente que a propriedade AutomaticAdjustsScrollViewInsets funciona somente se algum tipo de exibição de rolagem (exibição de tabela, exibição de coleção) for.
A visão do VC, ou Primeira subvisão desta visão.
Outro sugerido, que ele funciona, mesmo que seja a primeira subvisão, mas existem outras visualizações de rolagem na hierarquia de exibição.
EDITAR (extensão DIY)
Se você quiser um comportamento semelhante mesmo que não possa cumprir essas condições (por exemplo, você tem uma imagem de fundo abaixo da visualização de rolagem), você pode ajustar manualmente as inserções de exibição de rolagem. Mas, por favor, não configurá-lo como constante, como 44 ou 64 ou mesmo 20 como muitos sugerem em torno de SO. Você não pode conhecer o tamanho de todos. Pode haver notificação de incall / gps / audio, a barra de navegação não precisa estar sempre 44 pts, etc.
Eu acho que a melhor solução é usar o comprimento layoutGuide em didLayoutSubviews:
Você pode usar o guia bottomLayout da mesma maneira.
Комментариев нет:
Отправить комментарий