Edgesforextendedlayout uiviewcontroller


Edgesforextendedlayout uiviewcontroller
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.

Edgesforextendedlayout uiviewcontroller
Obter através da App Store Leia esta publicação em nosso aplicativo!
Por que o UIViewController se estende por UINavigationBar, enquanto UITableViewController não?
Tenho UITabbarController com UINavigationController nele. Eu tenho uma subclasse de UIView que eu atribuo como a visão do UIViewController no navController. Isso é bastante padrão, certo? É assim que eu faço isso.
Essa visão tem um UITableView como subView.
Por causa da depuração, estou configurando self. backgroundColor = [UIColor blueColor] na vista.
A partir da inicialização acima do tableView, pode-se pensar que o quadro da tabela e da tabela é o mesmo. No entanto, quando eu executo no iOS 7, a origem da vista é definida por trás do UINavigationBar. Isso é compreensível porque estou configurando self. navigationBar. translucent = YES; na minha subclasse do UINavigationController. Mas o que eu não entendo é como a mesa está sentada logo abaixo do navBar? Não deveria também começar de (0, 0) que está por trás do navBar? Ver screenshot Cenário 1 abaixo. Observe a tonalidade azul atrás do navBar.
Agora, eu coloco outro viewController na pilha de navegação, simplesmente usando [self. navigationController pushViewController. ]. Mais uma vez eu tenho um UIView personalizado com um tableView nele. No entanto, eu também tenho um UILabel acima desta tabela, e novamente para depuração, eu dei uma cor vermelha. Desta vez, estou configurando a origem do rótulo para ser quase o mesmo que o da vista.
Então, seguindo a lógica acima, o rótulo deve ser visível, certo? Mas desta vez não é. Desta vez, o rótulo está atrás do navBar.
Observe, a tonalidade vermelha por trás do navBar.
Gostaria muito de alinhar o subView abaixo do navBar de forma consistente. Minhas perguntas são.
1. Como o tableView é compensado por 64 pixels (altura do nav + barra de status no iOS 7), mesmo que o quadro seja o mesmo que o da tela?
2. Por que isso não acontece na segunda vista?
Por padrão, as visualizações do UITableViewController são inseridas automaticamente no iOS7 para que elas não iniciem abaixo a barra de navegação / barra de status. Este é o controlador pela configuração "Ajustar inserções de exibição de rolagem" na guia Inspetor de Atributos do UITableViewController no Builder de Interface, ou pelo método setAutomaticallyAdjustsScrollViewInsets: de UIViewController.
Para obter um conteúdo do UIViewController, se você não quiser que os conteúdos da vista se estendam sob as barras superior / inferior, você pode usar as configurações Extend Edges Under Bars / Under Bottom Bars no Interface Builder. Isso é acessível através da propriedade edgeForExtendedLayout.
A resposta de @ Gank está correta, mas o melhor lugar para fazer isso é no UINavigationControllerDelegate (se você tiver um):

Como parar a sua visão sob a barra de navegação usando edgeForExtendedLayout.
A partir do iOS 7.0, todas as visualizações vão automaticamente atrás de barras de navegação, barras de ferramentas e barras de guia para fornecer o que Apple chama de "contexto" - ter uma idéia do que está embaixo da interface do usuário (embora esvaziado com um efeito de vidro fosco) dá aos usuários uma idéia do que mais está fora da tela.
Se isso está ficando no seu caminho (e, honestamente, ele se torna surpreendentemente freqüentemente), você pode desabilitá-lo facilmente para um determinado controlador de visualização, modificando sua propriedade edgeForExtendedLayout.
Por exemplo, se você não quiser que um controlador de visualização se afaste de qualquer barra, use isso:
Disponível no iOS 7.0.
Essa solução funcionou para você? Por favor, passe-o!
Sobre a Swift Knowledge Base.
Isso faz parte da Swift Knowledge Base, uma coleção gratuita e pesquisável de soluções para questões comuns de iOS.
Acha que conhece o Swift? O meu livro Swift Coding Challenges colocará suas habilidades Swift à prova - é perfeito para entrevistas de trabalho e muito mais!

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.

Xamarin.
Propriedade UIKit. UIViewController. EdgesForExtendedLayout.
[get: ObjCRuntime. Introduzido (ObjCRuntime. PlatformName. iOS, 7, 0, ObjCRuntime. PlatformArchitecture. None, null)]
[conjunto: ObjCRuntime. Introduzido (ObjCRuntime. PlatformName. iOS, 7, 0, ObjCRuntime. PlatformArchitecture. None, null)]
Public Virtual UIRectEdge EdgesForExtendedLayout.
Observações.
Antes do iOS 7, o UIViewController. View não subtraia visualmente os elementos pai, como a barra de status, a barra de navegação ou a barra de ferramentas. No iOS 7, normalmente deveria.
O UIViewController. EdgesForExtendedLayout especifica para o UIViewController. ParentViewController como as bordas deste UIViewController devem ser estendidas para subjugar. O valor padrão de UIRectEdge. All especifica que todas as bordas devem ser estendidas para subjugar, enquanto UIRectEdge. None especifica uma extensão semelhante à do iOS 6 ou anterior.
A seguinte imagem ilustra a diferença: quando UIKit. EdgesForExtendedLayout está configurado para UIRectEdge. All, o retângulo de desenho do UIView subjacente subjacente, mas se UIKit. EdgesForExtendedLayout estiver configurado para UIRectEdge. None, o retângulo de desenho é restrito ao interior.
Requisitos.
Assembly: Xamarin. iOS (em Xamarin. iOS. dll)
Versões de montagem: 0.0.0.0.
UIKit Namespace.
Estruturas.
Interfaces.
Enumerações.
Produtos Xamarin para Visual Studio Xamarin Test Cloud Xamarin Insights Xamarin University Xamarin Studio Visual Studio Xamarin. Forms Aplicações pré-construídas Mono Licensing Company Quem somos Clientes Parceiros Blog Empregos Prêmio Pricing Centro de desenvolvedores Começar Guias Recipes Xamarin. iOS APIs Xamarin. Android APIs Xamarin. Mac APIs Fóruns Vídeos Connect Developer Support Resources Consultoria Serviços Contato Vendas Twitter GitHub Stack Overflow Facebook Google+ YouTube.
Xamarin Inc., como uma subsidiária integral da Microsoft que atua como uma entidade jurídica separada, adere à Declaração de Privacidade da Microsoft: Privacidade e biscoitos.

Comments