CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];
UISearchBar *mySearchBar = [[UISearchBar alloc]
initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];
mySearchBar.autoresizingMask =
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;
UITableView *myTableView = [[UITableView alloc]
initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];
myTableView.autoresizingMask =
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];
Nas versões anteriores, ele está funcionando corretamente. A barra de pesquisa está aparecendo abaixo da statusbar
barra de navegação e. O tableview
está aparecendo abaixo da barra de pesquisa
Mas quando eu executo isso Xcode 5 sdk iOS 7
, a barra de pesquisa não fica visível (acho que está localizada abaixo da barra de status e da barra de navegação), e também a barra de navegação está aparecendo sobre a visualização da tabela.
Será corrigido com iOS 7
uma versão estável?
Ou é o problema da minha codificação?
Ou devemos lidar com isso adicionando o (y = statubar height + nav bar height)
valor de y para iOS 7
?
Recentemente baixei o Xcode 5 DP para testar meus aplicativos no iOS 7. A primeira coisa que notei e confirmei é que os limites de minha visualização nem sempre são redimensionados para levar em conta a barra de status e a barra de navegação.
Em viewDidLayoutSubviews, imprimo os limites da visualização:
{{0, 0}, {320, 568}}
Isso faz com que meu conteúdo apareça abaixo da barra de navegação e da barra de status.
Eu sei que poderia contabilizar a altura sozinho obtendo a altura da tela principal, subtraindo a altura da barra de status e da barra de navegação, mas isso parece um trabalho extra desnecessário.
Alguém mais experimentou esse problema?
ATUALIZAR:
Eu encontrei uma solução para este problema específico. Defina a propriedade translúcida da barra de navegação como NÃO:
self.navigationController.navigationBar.translucent = NO;
Isso corrigirá o enquadramento da visualização abaixo da barra de navegação e da barra de status.
No entanto, não encontrei uma solução para o caso em que você deseja que a barra de navegação seja translúcida. Por exemplo, ao visualizar uma foto em tela inteira, desejo que a barra de navegação seja translúcida e a visualização emoldurada abaixo dela. Isso funciona, mas quando alterno para mostrar / ocultar a barra de navegação, tenho resultados ainda mais estranhos. A primeira subvisualização (a UIScrollView
) obtém seus limites y origem alterada a cada vez.
Respostas:
Isso não é totalmente verdade. Houve uma nova propriedade introduzida no iOS 7 que permite ajustar o comportamento do layout como nas versões anteriores do iOS. Coloque este pedaço de código em seu controlador de visualização e você estará pronto para começar! O espaço que sua barra de navegação ocupa deve ser contabilizado automaticamente
Você precisa adicionar o acima em seu
-(void)viewDidLoad
método.Nota: Você deve estar usando a versão GM mais recente do iOS 7 e Xcode 5 agora, uma vez que a API mudou das versões beta.
fonte
Se você está trabalhando no Storyboard (o que eu recomendo fortemente!), Esta é a solução: Você pode desabilitar "Extend Edges" do seu ViewController no storyboard. Você tem que fazer isso para cada viewController. Você pode desativar as bordas estendidas clicando no ícone viewController no stortyboard (ao lado do productOwner abaixo da própria visualização) e selecionando o inspetor de atributos (como as imagens mostram).
Isso também definirá as linhas de alinhamento, como iOS 6.
Outra ótima ferramenta no xCode 5 é "Preview": clique no botão do mordomo (editor assistente) e selecione Preview. lá, você pode selecionar iOS 6 e ver como ficará o design do storyboard no iOS 6.
É simplesmente ótimo: D
[Atualizar]
Tenha cuidado: desabilitar "Estender Bordas" pode resultar em um brilho preto na barra de navegação quando o aplicativo entra em segundo plano no iOS7. o brilho também ficará visível na visualização multitarefa (pressione duas vezes o botão home). isso pode ser resolvido definindo a cor de fundo da visualização da barra de navegação como branco.
fonte
Como diz o OP, existe uma solução simples para isso que é definir a barra de navegação como opaca. Em vez de fazer isso no código, basta desmarcar "Translúcido" para sua barra de navegação raiz:
fonte
self.edgesForExtendedLayout=UIRectEdgeNone;
Funciona no simulador iOS 7 (Xcode 5 DP5)
fonte
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
essas respostas foram úteis, especialmente MQoder, mas para mim também tive que definir a barra superior padrão para "navegação em preto opaco".
fonte
A resposta de @One Man Crew está correta, mas:
Eu recomendaria usar este código para evitar erros ao executar o aplicativo em versões mais antigas:
fonte
E você precisa fazer isso em AppDelegate # application: didFinishLaunchingWithOptions:
Caso contrário, a cor de fundo da barra de navegação mudará para cinza. Porque a barra de navegação transparente se sobrepõe à janela.
fonte
Se você deseja manter a transparência quando o usuário rola a visualização da sua tabela, você pode definir o contentInset dela:
fonte
Uma solução é usar o Navigation Controller. Isso resolve o problema automaticamente. Use também o Xcode 5 em vez das versões do Xcode Preview, uma vez que são beta.
fonte