Edgesforextendedlayout Painéis Translúcidos


Eu não quero que meu scrollView esteja por trás do navigationBar por padrão. Então eu configurei self. edgesForExtendedLayout UIRectEdgeNone. Esse viewDidLoad é a mãe viewDidLoad de todos os meus viewController. Isso é bom. Mas eu gosto do efeito translúcido. Parece que o efeito translúcido desapareceu quando eu configurei self. edgesForExtendedLayout para nenhum. Como eu configuro isso para nenhum e ainda tenho esse efeito translúcido. Acho que uma boa solução seria organizar a inserção do scrollview. E isso é o que eu tenho: Não está funcionando para mim também, mas eu don39t saber por que, eu só posso adivinhar. Suponho que, quando você estiver usando um controlador de navegação personalizado ou qualquer ferramenta personalizada para exibir o controlador de exibição, o ajuste ou as inserções de conteúdo podem não ser calculadas corretamente, porque o iOS considera que sua barra de navegação não está mostrada. Ndash Oleksii Kalentiev 9 de outubro 13 às 10: 43No iOS 7, o UIStatusBar foi projetado de forma a que ele se funde com a exibição como esta: é legal, mas vai prejudicar sua visão quando você tiver algo na parte superior de Sua visão, e ela se sobrepõe com a barra de status. Existe uma solução simples (como definir uma propriedade em info. plist) que pode mudar a maneira como ele funciona, não se sobrepondo a como está no iOS6. Eu sei que uma solução mais direta é ter self. view. center. x 20 pontos Para cada controlador de visualização único, mas alterá-los irá parafusar outras dimensões para cima (tendo um self. view. center. x diferente pode causar problemas para segues personalizadas, etc.) e de repente ele se transforma em um trabalho tedioso que é melhor evitar. Ficaria feliz se alguém me pudesse fornecer uma solução única para isso. P. S. Eu sei que posso ocultar a barra de status ao fazer coisas como ter o método In didFinishLaunchingWithOptions, mas isso é uma solução alternativa, um atalho evitando o problema, então não considero que seja uma solução real. Isso é transmitido de uma postagem do blog que escrevi. Mas aqui está o resumo completo nas barras de status, barras de navegação e controladores de exibição de contêiner no iOS 7: Não há como preservar o layout da barra de status do estilo iOS 6. A barra de status sempre se sobrepõe à sua aplicação no iOS 7 Não confunda a aparência da barra de status com o layout da barra de status. A aparência (luz ou padrão) não afeta a forma como a barra de status é apresentada (frameheightoverlap). É importante notar também que a barra de status do sistema não possui mais nenhuma cor de fundo. Quando a API se refere a UIStatusBarStyleLightContent, eles significam texto branco em um plano de fundo claro. UIStatusBarStyleDefault é texto preto em um fundo claro. A aparência da barra de status é controlada ao longo de um dos dois caminhos de base mutuamente exclusivos: você pode configurá-los de forma programática da maneira tradicional, ou a UIKit atualizará a aparência para você com base em novas propriedades do UIViewController. A última opção está ativada por padrão. Verifique o valor do seu conteúdo de aplicativos para ViewController-Based Status Bar Aparência para ver qual deles você está usando. Se você definir esse valor como SIM, todos os controladores de visualização de nível superior em seu aplicativo (além de um controlador de exibição de contêiner UIKit padrão) precisam substituir preferidosStatusBarStyle, retornando o padrão ou o estilo leve. Se você editar o valor plist para NO, então você pode gerenciar a aparência da barra de status usando os métodos familiares UIApplication. O UINavigationController alterará a altura de seu UINavigationBar para 44 pontos ou 64 pontos, dependendo de um conjunto bastante estranho e indocumentado de restrições. Se o UINavigationController detectar que o topo do quadro de suas vistas é visualmente contíguo com o seu UIWindows top, ele desenha sua barra de navegação com uma altura de 64 pontos. Se as suas vistas superiores não forem contíguas com a parte superior das UIWindows (mesmo que desligadas por apenas um ponto), ele desenha sua barra de navegação da maneira tradicional com uma altura de 44 pontos. Essa lógica é executada pelo UINavigationController, mesmo que sejam várias crianças dentro da hierarquia do controlador de exibição de sua aplicação. Não há como evitar esse comportamento. Se você fornecer uma imagem de fundo da barra de navegação personalizada com apenas 44 pontos (88 pixels) de altura e os limites de vistas UINavigationControllers correspondem aos limites UIWindows (conforme discutido em 4), o UINavigationController irá desenhar sua imagem no quadro (0,20,320, 44), deixando 20 pontos de espaço preto opaco acima de sua imagem personalizada. Isso pode confundir você em pensar que você é um desenvolvedor inteligente que ignorou a regra 1, mas está enganado. A barra de navegação ainda tem 64 pontos de altura. Incorporar um UINavigationController em uma hierarquia de exibição de estilo slide-to-revelar torna isso bastante claro. Tenha cuidado com a propriedade confundida do edgeForExtendedLayout do UIViewController. Ajustar bordasForExtendedLayout não faz nada na maioria dos casos. A única maneira que o UIKit usa essa propriedade é se você adiciona um controlador de exibição a um UINavigationController, então o UINavigationController usa edgeForExtendedLayout para determinar se o controlador de exibição filho deve ou não estar visível debaixo da área da barra de status da barra de navegação. A definição de bordasForExtendedLayout no UINavigationController em si não faz nada para alterar se o UINavigationController possui ou não uma área de barra de navegação de 44 ou 64 pontos. Veja 4 para essa lógica. Uma lógica de layout semelhante aplica-se à parte inferior da sua visão ao usar uma barra de ferramentas ou UITabBarController. Se tudo o que você está tentando fazer é impedir que seu controlador de exibição infantil exclusivo suba a barra de navegação quando estiver dentro de um UINavigationController, defina edgesForExtendedLayout para UIRectEdgeNone (ou pelo menos uma máscara que exclui UIRectEdgeTop). Defina esse valor o mais cedo possível no ciclo de vida do seu controlador de visualização. O UINavigationController e o UITabBarController também tentarão preencher as entradas de conteúdo de vistas de tabela e as vistas de coleção em sua hierarquia de sub-visualização. Ele faz isso de forma semelhante à lógica da barra de status de 4. Existe uma maneira programática de impedir isso, definindo automaticamente AjustesScrollViewInsets para NO para suas visualizações de tabela e vistas de coleção (ele é padrão para SIM). Isso colocou alguns problemas sérios para Whisper e Riposte, pois usamos ajustes contentInset para controlar o layout das visualizações de mesa em resposta à barra de ferramentas e aos movimentos do teclado. Para reiterar: não há como retornar à lógica de layout da barra de status do estilo iOS 6. Para aproximar isso, você deve mover todos os controladores de exibição do seu aplicativo para uma visão de contêiner que é compensada por 20 pontos da parte superior da tela, deixando uma visão intencionalmente preta atrás da barra de status para simular a aparência antiga. Este é o método que acabamos usando no Riposte e Whisper. A Apple está empurrando muito para garantir que você não tente fazer 9. Eles querem que nós redesenhamos todos os nossos aplicativos para subjugar a barra de status. Há muitos argumentos convincentes, no entanto, tanto para a experiência do usuário como para os motivos técnicos, porque isso nem sempre é uma boa idéia. Você deve fazer o que é melhor para seus usuários e não simplesmente seguir o capricho da plataforma. Corrigir erros de escala adicionando auto. window. bounds CGRectMake (0, 20, self. window. frame. size. width, self. window. frame. size. height) erros de digitação corrigidos na instrução NSNotificationCenter Atualizações em 12 de setembro de 2013: corrigido UIViewControllerBasedStatusBarAppearance Para NÃO adicionou uma solução para aplicativos com rotação de tela adicionou uma abordagem para alterar a cor de fundo da barra de status. Não há, aparentemente, nenhuma maneira de reverter a barra de status do iOS7 de volta ao modo como funciona no iOS6. No entanto, sempre podemos escrever alguns códigos e transformar a barra de status em iOS6-like, e esta é a maneira mais curta em que posso surgir: Configure UIViewControllerBasedStatusBarAppearance para NO em info. plist (Para excluir a exibição de controladores, ajuste a barra de status Estilo para que possamos definir o estilo da barra de status usando o método UIApplicationstatusBarStyle.) No aplicativo AppDelegates: didFinishLaunchingWithOptions. Chamada Verifique se o iOS 7. Define o conteúdo das barras de status para ser branco, em oposição a UIStatusBarStyleDefault. Evite submissões cujos quadros se estendam para além dos limites visíveis de aparecer (para visualizações que são animadas na vista principal a partir do topo). Crie a ilusão de que a barra de status ocupa espaço como a forma como está no iOS 6, deslocando e redimensionando o quadro da janela de aplicativos. Para aplicativos com rotação de tela, use NSNotificationCenter para detectar mudanças de orientação, adicionando se (NSFoundationVersionNumber gt NSFoundationVersionNumberiOS61) e crie um novo método no AppDelegate: de modo que, quando a orientação for alterada, ele irá ativar uma declaração de mudança para detectar a orientação da tela de aplicativos (Portrait, Upside Down, Landscape Left ou Landscape Right) e altere o quadro da janela de aplicativos, respectivamente, para criar a ilusão da barra de status do iOS 6. Para alterar a cor do plano de fundo da sua barra de status: em AppDelegate. h para criar uma propriedade em sua classe e impedir que a ARC a desaloque. (Você não precisa fazer isso se você não estiver usando o ARC). Depois disso, você só precisa criar o UIWindow em if (NSFoundationVersionNumber gt NSFoundationVersionNumberiOS61): Não se esqueça de sintetizar fundo após a implementação AppDelegate Esta atualização é a melhor solução de navegação do iOS 7 Bar problem. You pode configurar o exemplo de cores da barra de navegação: FakeNavBar. backgroundColor UIColor redColor Note. Se você usa o Controle de navegação padrão, use a solução antiga. OLD SOLUTION - Se você usa o código anterior, ignore o seguinte Código e Imagem. É uma versão antiga da solução de barra de navegação iOS 7. Resolvi o problema com o seguinte código. Isto é para adicionar uma barra de status. DidFinishLaunchingWithOptions E para o Interface Builder, isto é para quando você abre com o iOS 6 está começando em 0 pixels. Nota: iOS 67 Deltas só aparecem se você desmarcar Usar Autolayout para o Controlador de Visualização no Inspetor de Arquivos (ícone mais à esquerda) no painel de detalhes. Aqui, outra abordagem para projetos que fazem uso extensivo do Storyboard: o objetivo dessa abordagem é recriar o mesmo estilo de barra de status no iOS7, como ocorreu no iOS6 (veja o título da pergunta iOS 7 Status Bar Voltar ao estilo iOS 6). Para conseguir isso, usamos o Storyboard, tanto quanto possível, deslocando elementos de interface do usuário que são sobrepostos pela barra de status (em iOS 7) para baixo, enquanto usam deltas para reverter a alteração de layout para o iOS 6.1 ou anterior. O espaço extra resultante no iOS 7 é então ocupado por um UIView com a cor backgroundColor definida como uma cor de nossa escolha. O último pode ser criado em código ou usando o Storyboard (veja ALTERNATIVAS abaixo) Para obter o resultado desejado ao seguir as etapas abaixo, assume-se que a aparência da barra de status com base no controlador está definida como NÃO e que o estilo da barra de status é ou Definido para estilo preto transparente (alfa de 0,5) ou estilo preto opaco. Ambas as configurações podem ser fundadas ou adicionadas em Informações nas configurações do seu projeto. Adicione uma sub-visualização ao UIWindow para servir como o plano de sua barra de status. Para conseguir isso, adicione o seguinte ao seu aplicativo AppDelegates: didFinishLaunchingWithOptions: depois de makeKeyAndVisible Como você adicionou um plano de fundo para o iOS 7, você terá que ajustar o layout de seus elementos de UI que estão sobrepostos pela barra de status, enquanto preservam seu layout Para iOS6. Para conseguir isso, faça o seguinte: Certifique-se de que o uso do Autolayout não está marcado para o seu Storyboard (isto é, caso contrário o iOS 67 Deltas não é mostrado no Inspector de tamanho). Para fazer isso: selecione o arquivo de Storyboard mostrar Utilitários selecione Mostrar o Inspetor de Arquivos no Documento do Construtor de Interface desmarque Use Autolayout Opcionalmente, para ajudá-lo a monitorar as mudanças de layout para iOS 7 e 6 conforme você as aplica, selecione o Editor Assistente, selecione Visualizar e IOS 6.1 ou anterior: agora, selecione o elemento UI que você deseja ajustar para que não seja superado pela barra de status. Selecione Mostrar o Inspetor de tamanho na coluna Utilitários. Reposicione o elemento UI ao longo do eixo Y pela mesma quantidade que a barra de status bg altura : E altere o valor iOS67 Deltas para Y pelo mesmo valor NEGATIVO como a barra de status bg height (Observe a alteração na visualização do iOS 6 se você estiver usando): Para adicionar ainda menos código em projetos de storyboard-heavy e para ter o plano de fundo da barra de status Autoroteie, em vez de adicionar um fundo para sua barra de status, você pode adicionar uma exibição colorida a cada controlador de exibição que fica no topo da vista principal do viewcontroladores. Em seguida, você alteraria o delta de altura desta nova visualização para a mesma quantidade negativa que a altura da sua opinião (para fazê-la desaparecer no iOS 6). A desvantagem desta alternativa (embora seja insignificante considerando a compatibilidade de autorotação) é o fato de que esta visão extra não é imediatamente visível se você estiver visualizando seu Storyboard para o iOS 6. Você só saberia que está lá se você estivesse atento ao Documento Esboço do Storyboard. Eu consegui a barra de status como o iOS 6 no iOS 7. Defina UIViewControllerBasedStatusBarAppearance para NO em info. plist Passe este código no aplicativo - (BOOL): aplicativo (UIApplication) didFinishLaunchingWithOptions: (NSDictionary) método launchOptions Ele pode pressionar todas as suas visualizações até 20 Pixels. Para mais vir que use o código a seguir em - (void) viewDidAppear: (BOOL) método animado Você deve configurar o valor WindowHeight Userdefaults após a atribuição da janela no método didFinishLauncing, como, até eu girar o dispositivo (o meu dispositivo iOS 7 é iPad) Isso o corrige perfeitamente. Mas uma vez que eu roto, a barra preta permanece exatamente onde está e a quotviewquot (desculpa se esse é o termo técnico errado, eu sou um cara PhoneGapweb) mantém sua altura encolhida - exceto que já não é a altura, é a largura. Esta solução não ajuda a rotação, mas é a melhor correção que eu já vi - como pode ser melhorado para assistir rotações de dispositivos Obrigado ndash tylerl 8 de dezembro às 3:21 Se você estiver usando o construtor de interface, experimente isso: no seu arquivo xib: 1) Selecione A vista principal, defina a cor de fundo como preta (ou qualquer cor que você deseja que a barra de status seja 2) Certifique-se de que o plano de fundo é uma sub-visualização autônoma posicionada como filho de nível superior na visualização dos controladores. Mova o seu fundo para se tornar um filho direto da visão dos controladores. Verifique o painel de autenticação para ter certeza de que você bloqueou todas as bordas do quadro, ativou ambos os eixos de flexibilidade e, se for um UIImageView, configure o modo de conteúdo para Escalar para preencher. Programaticamente, isso se traduz em ContentMode configurado para UIViewContentModeScaleToFill e tem sua máscara de redimensionamento automático configurada para (UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleHeight). 3) Mova agora tudo o que está bloqueado para cima e para baixo por 20 pts e configure um iOS 67 delta Y para -20. Todos os filhos de nível superior que estão bloqueados no quadro superior no painel de autenticação precisam ser movidos para baixo por 20pts e têm o iOS 67 delta Y configurado para -20. (Cmd selecione todos esses e clique na seta para baixo 20 vezes - existe uma maneira melhor de qualquer um) 4) Ajuste a altura dota iOS 67 de todos os itens acima que tiveram uma altura flexível. Qualquer um dos itens que estavam trancados na parte superior e inferior do quadro e tinha altura flexível ativada no painel de autenticação também deve ter a altura de delta iOS 67 definida para 20. Isso inclui a exibição de plano de fundo mencionada acima. Isso pode parecer anti intuitivo, mas devido à ordem em que estes são aplicados, é necessário. A altura do quadro é definida primeiro (com base no dispositivo), então os deltas são aplicados e, finalmente, as máscaras de autenticação são aplicadas com base nas posições de deslocamento de todos os quadros filhos - pense por um pouco, isso terá sentido. 5) Finalmente, os itens que foram bloqueados no quadro inferior, mas não o quadro superior, não precisam de deltas. Isso lhe dará a mesma barra de status no iOS7 e no iOS6. Por outro lado, se você quiser o estilo iOS7 enquanto mantém a compatibilidade iOS6, defina os valores de delta delta Y de delta em 0 para a visualização em segundo plano. Isso pode ser um problema irresistível se você usar o layout automático porque você não pode manipular os quadros mais. Existe uma solução simples sem muito trabalho. Acabei escrevendo um método de utilidade em uma classe de utilidade e chamou-o de todo o método viewDidLayoutSubviews de controladores de exibição. Substitua o método viewDidLayoutSubviews no controlador de visualização, onde você deseja barra de status. Isso irá levá-lo através do fardo do Autolayout. Respondeu 28 de março às 17:18 A maneira mais fácil de fazer isso é instalar um SDK mais antigo no seu Xcode mais novo. Como instalar o SDK mais antigo no Xcode U mais novo, pode obter o SDK do iOS 6.1 a partir de 4sharedzipNlPgsxz6iPhoneOS61sdk. html ou fazer o download de um Xcode antigo e obter o SDK dos seus conteúdos. Descompacte e cole esta pasta para ApplicationsXcode. appContentsDeveloperPlatformsiPhoneOS. platformDeveloperSDKs Reinicie o xcode. U agora pode selecionar um SDK mais antigo em suas configurações de compilação de projetos Espero que ajude você. Funcionou para mim) respondeu 3 de outubro 13 às 19:06 trabalhou para mim. Obrigado marcelosalloum, mas ainda estou procurando uma solução para o meu aplicativo phonegap (uiwebview) para suportar a barra de status transparente do iOS739 para futuras atualizações do meu aplicativo. obrigado novamente. ) Ndash hanism 8 de outubro 13 às 9:40 marcellosaloum, você tem certeza de que o aplicativo será aceito pela Apple Eles disseram que os aplicativos compilados com o XCode 4 não seriam mais aceitos. Que, de fato, significa iOS 6 SDK. Ndash bettola 9 de abril às 13:44 Isso pode ser muito tarde para compartilhar, mas eu tenho algo para contribuir, o que pode ajudar alguém, eu estava tentando sub-classificar o UINavigationBar e queria fazer com que pareça ios 6 com barra de status preto E o texto da barra de status em branco. Aqui é o que eu encontrei trabalhando para isso. Isso fez meu plano de status de fundo preto, texto de barra de status branco e barras de navegação de cor branca. IOS 9.3, XCode 7.3.1 respondeu 31 de maio 16 às 11:16 2017 Stack Exchange, Inc

Comments

Popular Posts