Monday 21 August 2017

Edgesforextendedlayout Storyboard P


A primeira tela do meu aplicativo é UITableViewController sem uma barra de navegação, o que significa que o conteúdo flui sob a barra de status, então há muitas colisões de texto. Eu ajustei as propriedades para as barras inferiores e Ajustar as inserções de exibição de rolagem, que realmente o impedem de se deslocar para baixo, mas ao custo de manter a parte superior da vista da tabela abaixo. Eu tentei configurar o quadro UITableView para compensar por 20 pixels, mas ele não parece ter efeito e, como eu atualmente preciso que o aplicativo seja compatível com o iOS 6, não posso pular para o IOS 7 Storyboards para forçar o autolayout para usar o guia de altura superior. Alguém encontrou uma solução que funciona para ambas as versões As coisas que eu tentei: definindo edgesForExtendedLayout. Alterando as configurações dentro do Storyboard para barras inferiores e ajuste a exibição de rolagem. Forçando o quadro a uma nova área. Perguntou 19 de setembro às 16:40 Para qualquer pessoa interessada em replicar isso, esse problema é muito fácil de replicar: crie um novo projeto e exclua o ViewController padrão e substitua-o por um TableViewController que você arrasta para o Storyboard da Biblioteca de Objetos. Se você seguir estas etapas, você verá que nada, incluindo ajustes de caixas de códigos Xcodes para Extender bordas sob barras, bem como o uso irá colocar o UITableView abaixo da barra de status. Esse problema pode ser muito frustrante, e acredito que seja um erro no final das Maçãs, especialmente porque aparece no próprio TableViewController pré-conectado da biblioteca de objetos. Eu não concordo com todos os que estão tentando resolver isso usando qualquer forma de números mágicos, e. Use um delta de 20px. Esse tipo de programação fortemente acoplada definitivamente não é o que a Apple quer que façamos aqui. Descrevi duas soluções para este problema: preservando a cena do TableViewController s. Se você quiser manter o TableViewController no Storyboard, sem colocá-lo manualmente em outra visualização, você pode incorporar o TableViewController em um Controlador de Navegação (Editor Incorporar no Controlador de Navegação) e desmarcar a Barra de Navegação de Shows. Isso resolve o problema sem necessidade de ajustes extras e também preserva a cena do TableViewControllers no storyboard Usando o AutoLayout e incorporando o TableView em outra exibição (eu acredito que a Apple quer que façamos isso). Crie um ViewController vazio e arraste seu UITableView nele. Em seguida, arraste Ctrl do TableView para a barra de status. À medida que o mouse chega ao fundo da barra de status, você verá uma bolha Autolayout que diz o Guia de Layout Superior. Solte o mouse e escolha Espaciamento vertical. Isso indicará ao sistema de layout que o posicione logo abaixo da barra de status. Testei as duas formas em um aplicativo vazio e ambos trabalharam. Você pode precisar fazer alguns ajustes extras para fazê-los funcionar para o seu projeto. RyanR percebi isso também, mas acho que é bom em algum momento. A Apple fez o mesmo na exibição de abas abertas do Safari39 móvel, as guias serão exibidas debaixo da barra de status. A solução do controlador de navegação é a solução mais simples, eu raiz por isso. No entanto, a barra de status translúcido é uma idéia estúpida. Ndash Pride Chung 26 de setembro 13 às 17:01 A opção 2 não funciona mais no Xcode 5. A ação descrita (ctrl-drag) nunca deve ter funcionado, uma vez que é propriedade do sistema Outlets, mas mesmo que você arraste manualmente para a cena Árvore no guia de layout esquerdo e superior NÃO TRABALHA (deve fazer, AFAICT - Eu acredito que este é mais um grande erro no AutoLayout :( :() ndash Adam Dec 10 13 às 11:05 Atenção: Isso funcionou para mim para o Seguinte configuração: nenhuma barra de navegação na parte superior da tela (a exibição da tabela atende a barra de status) A exibição da tabela não é rolável Se os dois requisitos acima não coincidem com o seu milho pode variar. Eu criei minha visão de forma programática e isso acabou funcionando para mim: Fonte (na seção TopLayoutGuide no final da página 36). Adicionando a resposta máxima: depois que o segundo método não pareceu funcionar inicialmente, fiz algumas tentativas adicionais e encontrei a solução. O TLDR o topo responde a segunda solução quase funciona, mas Para algumas versões do xCode ctrldragging para o Top Layout Guide e selecionando Ve O espaçamento rtico não faz nada. No entanto, primeiro ajustando o tamanho da Vista da tabela e, em seguida, selecionando Top Space to Top Layout Guide funciona Arraste um objeto UITableView para o View. (Não UITableViewController). Posicione-o no centro usando os guias de layout azul. Arraste um UITableViewCell no TableView. Esta será a sua célula de reutilização de reutilização, portanto, não se esqueça de definir seu Identificador de Reutilização sob a guia Atributos ou você terá uma falha. Crie sua subclasse personalizada do UIViewController e adicione os protocolos ltuitableViewDataSource, UITableViewDelegategt. Não se esqueça de configurar seus storyboards ViewController para esta classe no Identity Inspector. Crie uma saída para seu TableView no seu arquivo de implementação e nomeie-o tableView Clique com o botão direito do mouse no TableView e arraste o DataSource e o delegado para o ViewController. Agora, para a parte de não recortar a barra de status. Pegue a borda superior da sua Vista da mesa e mova-a para baixo para um dos guias de layout automático azul quebrados que estão perto do topo. Agora, você pode controlar o arrastar da Tabela para a parte superior e selecionar o Top Space to Top Layout Guide. Dar-lhe um erro sobre o layout ambíguo do TableView, apenas adicionar restrições faltantes e o seu feito. Agora você pode configurar sua visão de tabela como normal, e não cortará a barra de status. Não sei como é Kosher, mas descobri que esse esquema move a exibição ViewControllers para baixo e fornece a barra de status com um fundo sólido: claro, Substitua RedColor com qualquer cor que você quiser para o plano de fundo. Você deve fazer separadamente um dos swizzles para definir a cor dos símbolos de caracteres na barra de status. Eu uso View view da barra de status com base no controlador NO e estilo de barra de status estilo preto opaco no plist, para fazer isso globalmente. Parece que funciona, e eu estou interessado em saber sobre quaisquer problemas ou problemas com ele. Respondeu 22 de janeiro 14 às 22:08 isso não funcionou para mim ndash Seslyn 29 de março 15 às 21:33 A seguinte solução funciona bem o suficiente no código sem usar constantes mágicas e explica o usuário alterando a classe de tamanho, p. Através de rotações ou aplicativos lado a lado no ipads: a solução Abrahamchezs developer. applelibraryiosqaqa1797index. html funcionou para mim da seguinte maneira. Eu tinha um único UITableviewcontroller como minha visão inicial. Tentei o código de deslocamento e incorporado em um navcon, mas não resolvi a transparência da barra de status. Adicione um Viewcontroller e torne-o a visualização inicial. Isso deve mostrar os guias críticos do layout do fundo do amplificador superior. Arraste o Tableview antigo para a Vista no novo controlador. Faça todas as coisas para adaptar a tabela ao novo controlador: mude o arquivo antigo view controller. h para inheritsubclass do UIViewController em vez de UITableViewController. Adicione UITableViewDataSource e UITableViewDelegate aos viewcontrollers. h. Reconecte qualquer coisa necessária no storyboard, como uma barra de busca. O grande é obter as restrições configuradas, como no Apple QampA. Eu não me incomodava em inserir uma barra de ferramentas. Não está certo a seqüência exata. Mas um ícone vermelho apareceu nos Guias de Layout, talvez quando eu construí. Cliquei e deixe o Xcode instalar as restrições. Então cliquei em todos os lugares até encontrar a restrição Vertical Space e alterei seu valor superior de -20 para 0 e funcionou perfeitamente. Aqui está um Swift 2.3. (Xcode 8.0). Criei uma subclasse de UITableView. O conteúdo Inset deve sempre ser zero (por padrão). Estou ajustando Zero manualmente. Você também pode adicionar um método de verificação que faz a verificação e se é algo diferente do que você quer que seja apenas obtenha o recto correto. A alteração refletirá somente quando a tabela for desenhada (o que não acontece com freqüência). Não se esqueça de atualizar o TableView no seu IB (no TableViewController ou apenas o TableView dentro do seu ViewController). Respondeu 6 de outubro 16 às 10:09 respondido em 25 de janeiro às 9:57 Apenas configure o quadro para a sua visão de mesa. E colocá-lo 44p para baixo do topo. No iOS 7 Tudo começou a partir da janela superior esquerda. Também a barra de status é parte da janela. Respondido 22 de setembro 13 às 22:32 veja todas as soluções: meu projeto é apenas usar xib, então a solução com o storyboard não funcionou para mim. Self. edgesForExtendedLayout UIRectEdgeNone apenas funciona para o controlador se a barra de navegação estiver visível. Mas se sua visão é apenas ter barra de status, isso não funcionará. Então eu combino dois conditons. Ajude isso a funcionar. Respondeu Jul 4 15 às 3:16 Se você também precisa suportar o iOS 6, você terá que condicioná-lo para baixo. Ou seja, no iOS 7 você deve simplesmente deslocá-lo para baixo 20 pontos (seja através de manipulação de quadro ou usando layout automático), e no iOS 6 você deixa isso sozinho. Eu não acredito que você pode fazer isso no IB, então você precisará fazê-lo no código. Você pode realmente fazer isso no IB, usando o iOS6iOS7 deltas. Defina sua posição no iOS 7, então, para o iOS 6, configure o delta Y para -20 pontos. Veja esta pergunta para obter mais informações. Respondeu 19 de setembro às 19:01 Ajustando o quadro, isso não o altera, infelizmente. Ndash Nicholas Smith 19 de setembro 13 às 19:07 O que não funciona sobre isso A visão da mesa não se move para baixo ndash Scott Berrevoets 19 de setembro 13 às 19:11 Sim, ele permanece na mesma posição. Eu tentei self. view. frame e self. tableView. frame. Em ambos viewWillAppear e viewDidLoad. Para estar seguro, eu também configure setContentNeedsDisplay para forçar um redraw. Ndash Nicholas Smith 19 de setembro 13 em 19: 13ECSlidingViewController é um contêiner controlador de exibição que gerencia uma interface em camadas. A camada superior ancora o lado esquerdo ou direito do recipiente enquanto revela a camada embaixo. Isto é mais conhecido como o Menu Lateral, Slide Out, Hamburger MenuDrawerSidebar, etc. Suporta todos os tamanhos e orientações da tela. A filosofia por trás do ECSlidingViewController é fornecer padrões simples enquanto são personalizáveis. Pode não funcionar ou parecer do jeito que você quer sair da caixa, mas não entra no modo de personalizá-lo. Container do controlador de visão bem comportado Seus controladores de visualização receberão o ciclo de vida e os métodos de rotação adequados na hora certa. Seus layouts serão adequadamente atualizados em rotação ou alterações vinculadas, respeitando sua propriedade edgeForExtendedLayout. Isso significa que você tem controle sobre como seus controladores de exibição se posicionam sob ou abaixo da barra de status, barra de navegação ou qualquer outro recipiente que estabeleça um TopLayoutGuide. O ECSlidingViewController tenta o melhor para sentir como se fosse uma parte da família de contêiner do controlador de visã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 acompanhamento personalizado e suporta sequências de desenrolamento para a transição entre controladores de exibição. Esse recurso é opcional e tudo pode ser feito programaticamente se você quiser. Assim como qualquer outro recipiente do controlador de visualização, você provavelmente usará Storyboards com algumas personalizações programáticas. Se a animação deslizante padrão ou a interação de deslocamento para mover a vista superior não se adequarem às suas necessidades, então você pode 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 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. Nota. Para suporte a iOS 5-7, o ECSlidingViewController versão 1.x está disponível nesta filial. Instale com o CocoaPods adicionando o seguinte ao seu Podfile:

No comments:

Post a Comment