Saturday 24 March 2018

Edgesforextendedlayout xib


Edgesforextendedlayout xib
Obter através da App Store Leia esta publicação em nosso aplicativo!
Adicionar guia de layout superior no arquivo NIB (XIB) [duplicado]
Esta questão já tem uma resposta aqui:
Como posso adicionar o guia de layout superior no arquivo NIB ou como posso especificar espaço na barra de navegação superior e na barra de status para que ele não crie problema entre ios 6 e iOS 7?
marcado como duplicado por Gavin, cpburnz, mguymon, royhowie, L & # 233; o L & # 233; opold Hertz 준영 21 de maio '15 às 23:26.
Esta pergunta foi feita antes e já tem uma resposta. Se essas respostas não respondem totalmente a sua pergunta, faça uma nova pergunta.
Você pode fazer isso implementando uma nova propriedade chamada edgeForExtendedLayout no iOS7 SDK.
Se você estiver usando a barra de navegação e xcode5 então ..
No Interface Builder, selecione o controlador de exibição e, em seguida, navegue até o inspetor de atributos. Em "Extensão de bordas". verifique abaixo das barras superiores.
Resolvi meu problema daqui.
Eu acho que você precisa escrever essa condição para isso.
Estou fazendo isso programaticamente.
porque você deve verificar os tamanhos de quadros para ios 7 e outros.
porque para a barra de status você precisa gerenciar 20 pixels no IOS 7 e outros.
Então, basta colocar View no XIB como quiser em qualquer IOS e para outro você pode gerenciar por isso.

Edgesforextendedlayout xib
Obter através da App Store Leia esta publicação em nosso aplicativo!
iOS7 - Exibir sob a barra de status - edgeForExtendedLayout não está funcionando.
Eu tenho um projeto que foi construído no ano passado, e usa XIBs, sem storyboards. Os XIBs não usam o Layout Automático, mas eles usam algum Autosizing. Tenho um problema ao correr com o iOS7, em que todas as visualizações estão dobradas na barra de status. Compreendo perfeitamente, isso é um novo recurso com o iOS7, no qual isso pode ser esperado. No entanto, todas as soluções para corrigi-lo para não fazer isso não estão funcionando. Eu tenho uma imagem no topo da exibição que sempre mostra sob a barra de status, e não estou usando barras de navegação ou algo assim.
Eu tentei atualizar os Y-deltas no XIB (eles não têm efeito na visualização), tentei configurar as bordasForExtendedLayout para UIRectEdgeNone (não faz nada) e uma infinidade de outras coisas. Toda vez, a barra de status mostra com a vista escondida sob isso, não importa o que eu faça ... isso é, a menos que eu mova manualmente para baixo a vista no XIB para permitir espaço para a barra de status (mas essa solução não funciona porque ela não parece direito no iOS6, é claro).
O que é estranho é que, mesmo quando eu tento uma linha de código para cortar em um turno de exibição, isso não funciona (como o seguinte):
.. Não é que eu iria com esse tipo de solução, mas é estranho que não funcionasse (a única vez que eu normalmente vejo que não funciona é se o Layout Automático estiver no lugar, o que não é neste caso).
É um requisito de design que a barra de status mostra, e estou apenas perplexo porque não consigo configurar a exibição para estar sob a barra de status do iOS7. Eu li todas as postagens de Depuração de Pilha no assunto, bem como a transição / guias da Apple. Mais uma vez, para reiterar, compreendo perfeitamente como deve funcionar e qual a solução esperada para isso, mas nada disso parece estar funcionando para esse projeto específico.
Eu sou um desenvolvedor experiente de iOS, mas esse projeto foi construído por outra equipe, então não sei se há algo escondido em algum lugar nos arquivos XIB, plist ou código que possam estar superando as configurações acima. Por favor, deixe-me saber se há algo mais que pode ser consultado sobre isso, ou mais informações que posso fornecer.
Desde já, obrigado!
Se você definir os valores delta do iOS 6/7 no Interface Builder, lembre-se de configurar "Ver como" para "iOS 6" no Documento do Builder da interface, já que é o layout do iOS 6 que deseja replicar. Os deltas serão então usados ​​apenas no iOS 7 para empurrar o conteúdo abaixo da barra de status. Se você deixar o "Ver como" configurado para o iOS 7 (o padrão), os deltas, em vez disso, oferecerão o iOS 7 no iOS 6.
No entanto, os deltas não irão ajudá-lo se você reposicionar ou redimensionar visualizações de forma programática com base no quadro de exibição, já que o quadro não é responsável pelos deltas.
Em vez de usar os deltas, a melhor solução que encontrei é habilitar o Layout Automático em seu XIB principal e, em seguida, definir a restrição de espaço superior na sua visualização superior / conteúdo para seguir o Guia de Layout Superior. Este guia foi introduzido no iOS 7 e representa a posição abaixo da barra de status. Infelizmente, o guia não está disponível no Interface Builder quando não estiver usando Storyboards, mas você pode adicioná-lo de forma programática.
O que eu fiz foi adicionar uma restrição de espaço superior ao superview em vez do Interface Builder e crie uma saída para isso no código. Então, no viewDidLoad, se o TopLayoutGuide estiver disponível (iOS 7+), substitua a restrição nesta saída por uma versão usando o Guia de Layout Superior.
Para referência, a solução abaixo funcionou quando eu apliquei no meu ViewControllers. No entanto, não é ideal e um pouco complicado. Se é a única abordagem que eu posso tomar, então seja assim.
A Apple está empurrando você para usar o autolayout para realizar isso. Você precisa definir uma restrição no "Guia de Layout Superior" da subvista superior em sua exibição.
Veja este documento por exemplo:
Para fazer isso sem XIB, você precisará adicionar a restrição programaticamente. Os documentos da Apple dão um bom exemplo disso, que eu resumi abaixo.
Dando que o TopLayoutGuide é uma propriedade em um controlador de exibição, você apenas usa no seu dicionário de ligações variáveis. Então você configura sua restrição como normal:
1) A solução mais simples se você não se importar com uma barra de navegação opaca:
2) A resposta do svguerin3 não pode funcionar no caso geral. Por exemplo, se uma das suas sub-visualizações usar autosizing para ser enganchado na parte inferior do seu contêiner, sua nova posição será errada. E poderia sair da tela no pior caso.
Você tentou visualizar seus XIBs como fonte e remover qualquer linha que contenha bordas antes da extensão?
Tivemos que remover esta linha nas cenas do nosso storyboard, já que as visões principais das cenas do storyboard são representadas por XIBs.
O que estava acontecendo para nós era que, de alguma forma, em algumas cenas, o conteúdo XIB para a visão principal da cena estava sendo pressionado pelo alto da barra de status e da barra de navegação.
A remoção dessa linha permitiu que os XIBs fossem exibidos como se o seu topo se tivesse originado na mesma parte superior da cena do storyboard.
Infelizmente, não temos idéia do que desencadeou isso, mas eu vi isso acontecer ao mudar a ordem do conteúdo dentro da visão principal do XIB de modo que um UITextView apareceu primeiro. Reorganizar a ordem dos itens depois disso foi desencadeada não teve efeito na remoção desse comportamento indesejado.
Espero que isso ajude qualquer outra pessoa a correr para este tipo de problema.
Se você estiver usando o storyboard, depois de configurar o layout superior da sua visão, você pode desmarcar as barras "Under Opaque" no Inspetor de atributos.

Importar & lt; Foundation / Foundation. h & gt;
O designer Xcode dá um erro nesta linha, dando a seguinte mensagem: "Classe 'FirstView' definido sem especificar uma classe Base. Agora, temos uma solução para isso digitando #import & lt; UIKit / UIKit. h & gt; na seção de importação. Depois Nós fazemos isso, tudo funciona corretamente. A única desvantagem é que temos que digitar isso toda vez que abrimos o designer xCode. Qualquer sugestão sobre o que estamos fazendo de errado ou existe de qualquer maneira que podemos resolver isso e gerenciar as importações por um arquivo de cabeçalho?
Só acontece quando deixamos o FirstView herdar do MvxViewController. Se o fizermos da maneira normal através do UIViewController, não temos problemas para trabalhar com o xibs. Se fizermos o último, porém, não podemos usar o MvvMCross e queremos criar uma boa aplicação de plataforma cruzada.

Classe UIViewController.
Criaremos um controlador de visualização personalizado. O projeto do Centro de Notificação foi capaz de detectar uma mudança de orientação; agora também poderemos fazer o texto funcionar na direção correta.
Uma visualização sob o controle de um controlador de visualização iOS 7 ocupa a tela cheia; veja o Guia de transição. Eu tentei desligar isso com a propriedade edgeForExtendedLayout do controlador de visualização, mas a exibição persistiu em ser 568 pares de pixels de alta. Felizmente, no entanto, a barra de status do iOS 7 é transparente. Eu simplesmente comecei o texto na exibição de texto com uma linha vazia para evitar que qualquer texto seja escrito atrás da barra de status.
Observe que as propriedades do quadro e dos limites não concordam nas orientações da paisagem.
Código fonte em Portrait. zip.
Main. m Classe PortraitAppDelegate Classe ViewController Classe View.
Crie o projeto.
Para criar a classe ViewController, destaque a pasta Retrato no Project Navigator.
Escolha um modelo para o seu novo arquivo: classe Objective-C.
Desmarque com o XIB para a interface do usuário.
Para criar a exibição de classe, destaque a pasta Retrato no Project Navigator.
Escolha um modelo para o seu novo arquivo: classe Objective-C.
Desmarque com o XIB para a interface do usuário.
Para permitir que o aplicativo seja executado na orientação de cabeça para baixo, selecione o nome do projeto no Xcode Project Navigator. No grande painel central do Xcode, role para baixo até.
Informação de implantação e rarr; Orientação dos Deícios.
e marque todas as quatro caixas de seleção. Adicione o método suportadoInterfaceOrientations ao controlador de exibição. Consulte Manipulação de rotações de exibição.
MVC: model-view-controller.
Este aplicativo se redesenha chamando o método drawRect: da Visão sempre que o iPhone é movido para uma nova orientação: retrato, paisagem, retrato de cabeça para baixo, etc. A máquina que chama drawRect: pertence a um novo objeto chamado controlador de exibição ou controlador para baixo. O controlador possui uma propriedade chamada interfaceOrientation. Sempre que o controlador sentir que essa propriedade mudou, o controlador assegurará que alguém chame o método drawRect: da visão controlada pelo controlador.
No futuro, eu prometo que o controlador irá responder às mudanças em algo muito mais substancial do que interfaceOrientation, que é uma das próprias propriedades do controlador. O controlador responderá às mudanças em um objeto separado chamado modelo, que pode ser um repositório formidável de dados. Quando os dados no modelo mudam, o controlador verificará que drawRect: é chamado.
Os dados também fluirão na direção oposta. O controlador sentirá quando os botões e controles deslizantes na visão receberam dados do usuário. O controlador transmitirá esses dados para o modelo. Por enquanto, no entanto, o fluxo de dados é apenas de uma maneira, desde o controlador até a vista.
Nós vimos um exemplo onde uma pequena vista amarela foi adicionada a uma grande visão branca. Nós poderíamos ter fornecido um controlador de visualização para essa grande visão branca, mas não para a pequena exibição em amarelo. Uma pequena visualização que foi adicionada a outra visualização não possui um controlador de exibição próprio.
O delegado de aplicativo cria o controlador de exibição.
Em vez de criar uma vista e uma janela, este delegado de aplicativo cria uma janela e um controlador de exibição. O controlador de visualização criará a vista. Na verdade, o controlador será o anjo da guarda da vida. Em qualquer momento, um controlador controla apenas uma visualização.
O delegado do aplicativo possui uma variável de propriedade chamada janela que aponta para a janela. A janela possui uma propriedade chamada rootViewController que aponta para o controlador. O controlador possui uma propriedade chamada vista que aponta para a vista. Faça um diagrama sobre isso em um pedaço de papel.
O controlador de visualização cria a vista.
A visão do controlador & rsquo; s é criada pelo método loadView do controlador. loadView cria a vista e armazena o endereço da vista na propriedade view do controlador. O código no loadView é um código familiar que até agora foi no aplicativo: didFinishLaunchingWithOptions:.
loadView é chamado automaticamente a primeira vez que o valor da propriedade do view do controlador & rsquo; s é usado. Por exemplo, o aplicativo de método: didFinishLaunchingWithOptions: poderia ter ativado uma chamada para carregarView com a seguinte menção de viewController. view. LoadView teria sido chamado imediatamente antes que o valor de viewController. view fosse usado como argumento de addSubview:.
Em vez das duas instruções acima, o aplicativo: didFinishLaunchingWithOptions: realizou o mesmo com a seguinte declaração. Consulte a documentação para o rootViewController.
O controlador e a exibição têm ponteiros entre si.
O controlador de exibição e a exibição contém variáveis ​​de instância ou propriedades que se apontam um para o outro. A propriedade view do objeto ViewController, herdada da classe UIViewController, aponta para o objeto View. Por outro lado, a variável de instância viewController do objeto View apontará para o objeto ViewController. Essa variável de instância permite que o objeto View envie mensagens para o objeto ViewController. Tem que ser um ponteiro __weak (dois sublinhados) para permitir que a imagem morra antes do controlador de exibição. Caso contrário, a visão e o controlador de visualização manter-se-ão vivos para sempre e nós teremos um vazamento de memória.
No nosso controlador de visualização, a propriedade de interfaceOrientation possui um dos quatro valores possíveis do tipo de dados UIInterfaceOrientation. Apenas entre você e eu, esse tipo de dados é basicamente um int, e os quatro valores são basicamente 1, 2, 3, 4.
O resultado de drawRect:
A orientação inicial é o retrato.
A visão do View & rsquo; s superview é a janela. O quadro e os limites da janela permanecem seriamente não afetados pela mudança de orientação.
A origem do Macintosh está no canto inferior esquerdo da tela, com o eixo Y apontando para cima. A origem do iPhone está no canto superior esquerdo da tela, com o eixo Y apontando para baixo. A CTM concorda com os limites da vista. O CTM para Portrait e PortraitUpsideDown significa & ldquo; flip-lo de cabeça para baixo, duplique o co & ouml; rdinates e adicione 640 ao y. & Rdquo; O CTM para LandscapeLeft e LandscapeRight significa & ldquo; flip-lo de cabeça para baixo, duplique os coxões e adicione 1136 ao y. & Rdquo;
Thinsg para tentar.
Mesmo que o controlador de visualização diga que o quadro da view & rsquo; s deve ser tão grande quanto o applicationFrame, a vista ocupa toda a janela. Isso faz com que a barra de status apareça na frente da parte superior da vista. Para evitar que as palavras na visualização sejam exibidas atrás da barra de status, drawRect: iniciou a seqüência de formato com o caractere "\ n" da nova linha. Uma maneira melhor de conseguir isso seria remover a nova linha e inserir o seguinte código de inicialização no método initWithFrame: controller: da visão.
Para fazer o controlador retransmitir a vista para as quatro orientações possíveis, o método suportadoInterfaceOrientations deve ou, mais brevemente, Para redimensionar apenas para retrato e retrato de cabeça para baixo, você pode dizer Veja todos os valores possíveis para o UIInterfaceOrientationMask.
Este aplicativo reconhece apenas quatro orientações possíveis. Para um aplicativo que reconheça mais dois, virado para cima e para baixo, veja o exemplo do centro de notificação. Para um aplicativo que reconheça ângulos de inclinação (por exemplo, 30 graus), veja o acelerômetro.
O método drawRect: método de classe UIView é chamado quando a orientação da exibição muda. O método de layoutSubvises de classe UIView também é chamado. Na vista de classe, mude o nome do método drawRect: methodSubSubviews e remova o argumento não utilizado rect.
Pode ser mais fácil criar este projeto com um modelo Xcode diferente.
Escolha um modelo para seu novo projeto: Aplicação de Visualização Única (em vez de Aplicação Vazia)
Coloque algumas informações no item da barra de guia ViewController & rsquo; s. Adicione o arquivo star. png à pasta Supporting Files no Project Navigator, marcando a caixa de seleção para & ldquo; Copie itens na pasta do grupo de destino & rsquo; s (se necessário). & Rdquo; Em ViewController. m, Execute o aplicativo e observe que o item da barra de tabulação ainda não está visível.
Agora, coloque um controlador de barra de guia sobre o ViewController. Inicialize o controlador da barra de tabulação no aplicativo: didFinishLaunchingWithOptions:. Um controlador de barra de guia geralmente possui uma matriz de cinco ou mais controladores sob ele, mas esse controlador de barra de tabulação possui uma matriz de apenas um controlador. Nossos outros arrays foram criados com arrayWithObjects:; Esta pequena matriz é criada com arrayWithObject:. O item da barra de guia ViewController & rsquo; s agora deve estar visível. (Para uma linha de itens da barra de guia, veja a loja de aplicativos.) Um crachá de mais de um caractere irá bloquear parte da estrela.
Coloque algumas informações no item de navegação viewController & rsquo; s. No initWithNibName: bundle: método de classe ViewController, insira o seguinte código. Um item de navegação tem espaço para um título mais elaborado do que um item de barra de guia. Execute o aplicativo e observe que o item de navegação ainda não está visível.
Agora, coloque um controlador de navegação sobre o ViewController. Inicialize o controlador de navegação no aplicativo: didFinishLaunchingWithOptions:. O item de navegação viewController & rsquo; s agora deve ser visível. Concluímos que a barra de navegação é de 74 pixels (ou pares de pixels) alta, pois 20 + 74 + 386 = 420.

No comments:

Post a Comment