Edgesforextendedlayout storyboard rápido


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 ele expõe seus pontos de vista, e isso é feito com essas propriedades: Basicamente, com essa propriedade você define quais lados de sua visã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 toda a tela. 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 view controller para não estender a view para cobrir a tela: Esta propriedade é usada quando sua view é 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 como None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não ficará atrás dela. 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 será adicionada à 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 YES (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. Se a barra de status for opaca, as exibições não serão estendidas para incluir também a barra de status, a menos que esse parâmetro seja YES. Portanto, se você estender sua visualização para cobrir a barra de navegação (edgesForExtendedLayout para UIRectEdgeAll) e o parâmetro for NO (padrão), ele não cobrirá a barra de status se ela for opaca. Se algo não estiver claro, escreva um comentário e eu responderei. Como o iOS sabe o que o UIScrollView usa o iOS captura a primeira subvisualização na visualização viewcontrollers, portanto, no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele. Obviamente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização). O ECSlidingViewController é um contêiner do controlador de exibição que gerencia uma interface em camadas. A camada superior se ancora no lado esquerdo ou direito do contêiner enquanto revela a camada abaixo dela. Isto é mais comumente conhecido como o Menu Lateral, Slide Out, Hamburger Menu / Drawer / Sidebar, etc. Suporta todos os tamanhos de tela e orientações. A filosofia por trás do ECSlidingViewController é fornecer padrões simples enquanto é personalizável. Pode não funcionar ou ter a aparência que você deseja, mas não atrapalha ao personalizá-lo. Container do Controlador de Visualização Bem Comportado Seus controladores de visualização receberão os métodos apropriados de ciclo de vida e rotação da visualização no momento certo. Seus layouts serão apropriadamente atualizados nas alterações de rotação ou limite, respeitando a propriedade edgesForExtendedLayout. Isso significa que você tem controle sobre como os controladores de visualização se posicionam abaixo ou abaixo da barra de status, da barra de navegação ou de qualquer outro contêiner que defina um topLayoutGuide. O ECSlidingViewController tenta o seu melhor para se sentir como se fosse parte da família de contêineres do controlador de visualização UIKit, e funciona ao aninhar qualquer combinação deles juntos. A configuração básica pode ser feita usando os Atributos de Tempo de Execução Definidos pelo Usuário. O ECSlidingViewController vem com um segue personalizado e suporta desdobramentos para a transição entre os controladores de visualização. Esse recurso é opcional e tudo pode ser feito programaticamente, se você quiser. Assim como qualquer outro contêiner do controlador de visualização, você provavelmente usará os Storyboards com algumas personalizações programáticas. Se a animação deslizante ou a interação de deslizamento padrão para mover a vista superior não atender às suas necessidades, você poderá personalizá-las fornecendo as suas próprias. As transições personalizadas usam os novos protocolos introduzidos no iOS 7 ao expor uma API semelhante à API que os contêineres do UIKit expõem para transições personalizadas. Você deve se sentir em casa se estiver familiarizado com a API de transição personalizada no iOS 7. Observação. Para suporte ao iOS 5-7, o ECSlidingViewController versão 1.x está disponível neste ramo. Instale com CocoaPods adicionando o seguinte ao seu Podfile: iOS7: Tempos divertidos com o novo layout de tela cheia Em uma corrida louca, eu tive que preparar um aplicativo para iOS7 após seu lançamento. Sim, eu sei, que vergonha por não ouvir todo mundo me dizendo para começar a preparar meus aplicativos cedo. Quão ruim poderia ser de qualquer maneira Na maior parte, não tão ruim. A pior parte para mim veio na forma de lidar com essa nova ideia de que todo UIViewController agora expande os limites de toda a tela, incluindo onde a barra de status e as barras de navegação poderiam estar. De qualquer forma, eu tive que aprender muito rapidamente. Se você ainda não sabe do que estou falando, aqui está uma foto de uma experiência de conversão desagradável: Neste ponto, muitos pensamentos passaram pela minha cabeça. Eu poderia apenas mudar as vistas da tabela Quadro certo Bem, então eu teria que verificar se o seu iOS7 ou não, e ajustar de acordo com a versão do iOS, eee isso não parece certo. Por que você faria isso comigo, Apple? Nesse momento, respirei fundo, relaxei e fiz o que qualquer desenvolvedor competente faria: pesquisei no Google. Isso, claro, me levou ao StackOverflow, e várias pessoas perguntando a mesma coisa. Por que minha barra de navegação e barra de status estão aparecendo na minha visualização? Há algumas respostas muito boas, sem dúvida. Tudo novo é antigo novamente Claro, a maneira mais fácil é apenas: fazer funcionar como costumava Isso é totalmente possível Tudo o que é necessário, está configurando a propriedade EdgesForExtendedLayout dos controladores view para UIRectEdge. None. Esta foi uma solução rápida, e acabou me colocando em funcionamento novamente até que eu pudesse descobrir as coisas (você pode, claro, escolher algumas, todas ou nenhuma das arestas a serem usadas para layout estendido com essa propriedade 8211, por exemplo, você pode querer que a parte superior fique embaçada sob a barra de navegação, mas a parte inferior não fique embaçada sob as guias). Esta foi uma solução viável, mas eu ainda não estava muito feliz com isso. Afinal de contas, os garotos bacanas estavam todos usando a sofisticada visão borrada atrás das barras de navegação e status como na imagem abaixo, e, quem não quer brilhante e novo Newfangledness amp Então, o que a Apple realmente pretende é obter um bom efeito de borrão o conteúdo de uma visualização rolável que está sob barras de navegação, barras de status, barras de abas, etc. É realmente muito bom, se você ainda não a viu em ação por si mesmo. Para que isso aconteça, basicamente precisamos projetar nossa visão para os limites da tela inteira. O problema com isso, é claro, é que não queremos que as partes superiores da nossa vista rolável sejam inicialmente escondidas atrás das barras de navegação e status. Conteúdo Insere para o resgate (pegue um café primeiro) Se a nossa visão preenche todos os limites da tela, ainda há uma barra de status e barra de navegação para mostrar por cima dela, precisamos de uma maneira de garantir que o conteúdo de nossa vista arent inicialmente escondido pelas barras de navegação e status. Para isso, podemos aproveitar a propriedade ContentInset que existe em qualquer tipo de visualização rolável (por exemplo: UITableView. UIWebView. UIScrollView. Etc). Esta pequena jóia de uma propriedade nos permite especificar onde o nosso conteúdo deve inicialmente começar, compensado pelas bordas da visão que está segurando. É importante notar que a Apple tenta nos ajudar aqui. Por padrão, a propriedade UIViewController, AutomaticallyAdjustsScrollViewInsets, é definida como true. o que significa que, em muitos casos, isso apenas funcionará, e você não terá que pensar sobre isso. No entanto, na prática, você pode encontrar alguns casos de borda (haha, get it) onde a inserção não pode ser inferida automaticamente, como eu fiz. Em um caso, meu UITableView não ajustava automaticamente a inserção corretamente. Para encurtar a história, eu tive que levar em conta uma barra de status (20pt) e uma barra de navegação (44pt) para um total de (64pt) inserido a partir da borda superior da tela. Isso significava que eu precisava definir meus novos UIEdgeInsets UITableView. ContentInset (64, 0, 0, 0). O resultado foi o meu UITableView ainda ocupando toda a tela, mas não fazendo a linha de cima inicialmente escondida atrás da barra de navegação, enquanto ainda aproveitando a agradável rolagem embaçada por baixo dela. Mais dinâmico Você pode ter zombado do meu exemplo de codificação da inserção. Tudo o que posso dizer é que às vezes você só precisa que funcione imediatamente. Se você gostaria de fazer isso de forma mais adequada, você deve considerar as outras novas propriedades que a Apple incluiu no UIViewController, que são: TopLayoutGuide e BottomLayoutGuide. Estes servem como uma referência para nos informar qual é a parte superior (e inferior) do nosso conteúdo dentro dos limites da tela (usando a propriedade. Length dos guias de layout Top / Bottom). Agora há um problema. À medida que este artigo foi publicado, a propriedade. Length estava ausente da API do Xamarin. Já existe um bug para uma correção e, enquanto isso, há um problema: Opa, há outro problema. Esta propriedade não parece retornar gt 0 até que as vistas tenham sido estabelecidas. Então, você pode considerar fazer algo assim: Além disso, não seja pego com as calças para baixo Se você ainda não adivinhou, algumas dessas propriedades são apenas iOS7. Portanto, se você ainda estiver segmentando o iOS6, precisará fazer algum tipo de verificação de versão para garantir que só use essas APIs quando o aplicativo estiver em execução no iOS7. De qualquer forma, espero que isso aconteça para outra pessoa que está passando pela mesma dificuldade de aprendizado. como eu fiz, para obter seu aplicativo pronto para iOS7 Post navigation

Comments

Popular Posts