Estou tendo problemas persistentes para obter meus layouts corretos com um aplicativo que é iniciado com um UITabBarController, enquanto cada guia é preenchida com um UINavigationController com uma raiz subclassificada UIViewController: por alguma razão, a parte inferior do meu conteúdo para cada controlador de visão é coberto pelas guias em rápido. Estou bastante comprometido em fazer isso programaticamente e não através do IB, mas estou claramente faltando alguma coisa com layouts inferidos. Obrigado por qualquer esclarecimento, especialmente em relação a um método que não envolve o uso da lógica -20 ou -44 eu acho muito hacky para o meu gosto. Nota 1: Tentei manipular. bounds e. clipsToBounds sem sucesso Nota 2: O mesmo problema existe no objetivo-C, com comparável codeStarting no iOS7, os controladores de vista usam layout de tela cheia por padrão. Ao mesmo tempo, você tem mais controle sobre como expõe suas visualizações, 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ê empurre um UIViewController em um UINavigationController. Quando a exibição desse controlador de exibição é estabelecida, ele será iniciado onde a barra de navegação termina, mas essa propriedade irá definir quais lados da exibição (parte superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira. Vamos vê-lo com um exemplo: Aqui você não está definindo o valor de edgesForAxtendedLayout. Portanto, o valor padrão é tomado (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher a tela inteira. Este é o resultado: Como você pode ver, o fundo vermelho se estende atrás da barra de navegação ea barra de status. Agora, você vai definir esse valor para UIRectEdgeNone. Então você está dizendo o controlador de exibição para não estender a exibição para cobrir a tela: Esta propriedade é usada quando sua exibiçã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 vai ver todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela para cobrir toda a tela ao percorrer. Nesse caso, a definição de edgesForFextendedLayout para Nenhum irá funcionar porque a sua tabela irá iniciar a rolagem onde a barra de navegação termina e ela não vai atrás dela. Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (configuração esta propriedade para YES, também o valor padrão) ele irá adicionar inserir para o topo da tabela, para que a tabela vai começar onde a navegação Barra termina, mas o pergaminho irá cobrir toda a tela. Isto é, quando é definido como NÃO: E SIM (por predefinição): Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (SIM), começará por debaixo da barra de navegação. Este valor é apenas uma adição aos anteriores. Se a barra de status for opaca, as exibições 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 está claro, escrever um comentário e resposta mal a ele. Como o iOS sabe o que o UIScrollView usa para usar o iOS agarra a primeira subvisão na sua visualização de viewcontrollers, então a que está no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ela. Evidentemente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização). Guia do Layout Uma das responsabilidades de um contêiner do controlador de visualização é o layout de suas visualizações de controladores de exibição filho. Este guia descreve como você pode controlá-lo. Reveal vs Peek Amount É assim que você especifica a posição horizontal da vista superior quando ela está ancorada em um lado. É importante saber a diferença entre o ancorado revelar e ancorado peek montantes ao apoiar múltiplas orientações e tamanhos de tela. Se você necessitar somente suportar uma única orientação em um tamanho de tela específico, então a diferença não importa. Revelar A quantidade horizontal da vista inferior para mostrar. Peek A quantidade horizontal da vista superior para mostrar. A convenção de nomenclatura para as propriedades: anchor (Esquerda ou Direita) (Reveal or Peek) Amount. A combinação de todas as possibilidades leva a estas quatro propriedades: anchorLeftPeekAmount anchorLeftRevealAmount anchorRightPeekAmount anchorRightRevealAmount Definir a quantidade de revelar em um lado irá calcular a quantidade de espetáculo para o mesmo lado e vice-versa. A propriedade definida será um valor fixo, fazendo com que a outra seja calculada. Esta é uma propriedade incorporada no UIViewController. Heres uma descrição do iOS 7 UI Guia de transição: A propriedade edgesForwardsxtendedLayout usa o tipo UIRectEdge, que especifica cada um dos retângulos de quatro bordas, além de especificar nenhum e todos. Use edgesForFextendedLayout para especificar quais bordas de uma exibição devem ser estendidas, independentemente da translucência de barras. Por padrão, o valor dessa propriedade é UIRectEdgeAll. ECSlidingViewController usa esse valor para decidir qual das bordas de vista estender para o recipiente. Se uma aresta não estiver estendida, ela será colocada no guia de layout. Este é o mesmo comportamento que os contêineres do controlador de exibição UIKit, exceto que as bordas laterais têm significado. Deixando UIRectEdgeTop fora da máscara edgesForFieldedLayout colocará a borda superior no guia de layout superior. Deixando UIRectEdgeBottom para fora da máscara edgesForFieldedLayout colocará a borda superior no guia de layout inferior. Deixando UIRectEdgeLeft para fora da máscara edgesForFieldExtendido irá colocar a margem esquerda para onde a borda direita vistas superior seria quando ancorado à esquerda. Isso afeta somente os controladores de vista usados como o subRightViewController. Ele pode ocupar toda a largura do recipiente ou então ele será igual à quantidade de revelação (se ele é fixo ou calculado). Deixando UIRectEdgeRight para fora da máscara edgesForFundamentExtendido irá colocar a borda direita para onde a borda esquerda de vistas superior seria quando ancorado direita. Isso afeta somente os controladores de exibição usados como o underLeftViewController. Ele pode ocupar toda a largura do recipiente ou então ele será igual à quantidade de revelação (se ele é fixo ou calculado). O layout para as vistas superior e inferior pode ser personalizado. Isso é feito criando um objeto que está em conformidade com o protocolo ECSlidingViewControllerLayout e retorná-lo no método de delegado de controladores de exibição deslizante: slidingViewController: layoutControllerForTopViewPosition: ECSlidingViewControllerLayout tem um único método a ser implementado: Você deve retornar um CGRect representando um quadro para o viewController determinado e TopViewPosition. Você pode retornar CGRectInfinite para alternar no layout padrão. Retorna um CGRect que é calculado com base no quadro de vistas do slidingViewController s. Se ele é fixo ou baseado na moldura de telas, mudanças de rotação e limites podem quebrar o layout. Posicione a vista de cima de acordo com os montantes ancorados do slidingViewController. Mantenha a semântica da topViewPosition. Por exemplo, se a topViewPosition for ECSlidingViewControllerTopViewPositionAnchoredRight. Em seguida, posicione a vista superior em algum lugar para a direita. Desde o acima são sugestões. Você não tem que segui-los. Basta saber as conseqüências que você pode quebrar o layout de rotação ou a semântica da API ECSlidingViewController.
No comments:
Post a Comment