Tuesday 31 October 2017

Edgesforextendedlayout Barras De Navegação


Corrigindo o Problema de sobreposição da barra de navegação do iOS 7 Ocorreu um problema que está envolvendo desenvolvedores de iOS, uma vez que as barras de navegação bastante transparentes surgiram no iOS 7, algo que quando pergunto às pessoas por que isso acontece, eles não tem absolutamente nenhuma idéia. Existe uma solução simples que todos usaram, mas é um hack e muitos desenvolvedores acabaram de usá-lo sem entender o problema. Coloque isso no seu controlador e de repente ele só funciona. Meio que Agora, a barra de navegação não tem como ser transparente, o que derrota a finalidade. As visualizações que devem estar por trás disso, a nossa visão de raiz e a cor de fundo da tela, não estão sendo exibidas. Honestamente, você pode não se importar, isso pode ser suficiente para você, mas é importante que você ainda entenda o problema, então leia. Se você já fez o desenvolvimento da web, isso é sorbo como transbordamento: oculto no CSS. Faz o trabalho, mas ainda é um tipo de quothackquot. Então, o problema é que quando o quadro do you39re view39 está configurado, ao contrário do iOS 6, o quadro ainda abrange a área embaixo da barra de navegação. O que você talvez não tenha percebido, é se um UIScrollView. Ou uma subclasse como UITableView. É a visão de raiz do seu controlador, ele terá a propriedade contentInset da sua propriedade definida corretamente, permitindo que a moldura esteja embaixo da barra de navegação, mas a origem real da qual ela começa a desenhar é na parte inferior da barra de navegação. Isso significa que podemos simplesmente resolver o problema da sobreposição da barra de navegação, fazendo com que nossa visão de raiz seja UIScrollView (ou subclasse de) em vez disso, enquanto ainda deixa nossa cor de fundo brilhar. Você pode fazer sua visão de raiz UIScrollView definindo o método loadView, onde sua visão de raiz e suas submissões devem estar sendo criadas se você estiver criando suas visualizações de forma programática. Se você tentar isso, você vai conseguir isso. Observe o vermelho brilhando através da barra de navegação Observe que nós estabelecemos a origem do azul da sua visão para ser o canto superior esquerdo. Tudo está sentado bem e trabalhando como a Apple esperava que usássemos as barras de navegação transparentes. Isso tem o bônus adicional de nos dar uma maneira mais fácil de expandir nosso layout além da tela também agora que estamos usando uma exibição de rolagem, mas você pode não precisar disso de qualquer maneira, em vez disso você pode usá-lo apenas como um substituto para UIView que pode ter it39s Conjunto contentInset. Não procurei as diferenças de memória para isso, mas minha expectativa é que seja extremamente mínimo. Se você quiser saber mais sobre o RubyMotion, confira os meus screencasts em motioninmotion. tv ou no meu próximo livro RubyMotion for Rails Developers. Que está disponível para pré-encomenda agora, sob um modelo de pagamento Pay What You Want, com a parte 1 quase terminada e que será lançada em breve. RubyMotion Adventures - O Blog MotionInMotion Iniciando 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 essa propriedade, você define quais lados de sua exibição podem ser estendidos para cobrir toda a tela. Imagine que você empurre um UIViewController para um UINavigationController. Quando a visão desse controlador de visualização é estabelecida, ele começará 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. Deixe-o com um exemplo: Aqui você não está definindo o valor de edgesForExtendedLayout. Portanto, o valor padrão é tomado (UIRectEdgeAll), então a vista amplia seu layout para preencher a tela inteira. 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: Esta 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 tabela cubra toda a tela ao deslocar-se. Nesse caso, definir bordasForExtendedLayout para None não funcionará porque sua tabela começará a deslizar para onde a barra de navegação termina e não vai atrasar. Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo esta propriedade para YES, também o valor padrão) ele irá adicionar inserir para o topo da tabela, então a tabela vai começar onde a navegação O bar termina, mas o pergaminho cobrirá toda a tela. Isto é 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. Este valor é apenas uma adição aos anteriores. Se a barra de status for opaca, as vistas não serão estendidas para incluir a barra de status também, a menos que este parâmetro seja SIM. Portanto, se você estender sua exibição para cobrir a barra de navegação (edgesForExtendedLayout para UIRectEdgeAll) eo parâmetro é NO (padrão) ele não vai cobrir a barra de status se o seu opaco. Se algo não estiver claro, escreva um comentário e eu responda. Como o iOS sabe o que o UIScrollView usa para usar o iOS agarra a primeira subview na visualização viewcontrollers, então a que está no índice 0 e se for uma subclasse do UIScrollView, 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).

No comments:

Post a Comment