Pergunta

Em alguns dos meus designs de aplicativos ou apenas em alguns UIViews, seguindo o pushViewController de um navigationController, minha nova visualização será deslocada para fora da janela pela altura da barra de status.Como resultado, colocarei este esboço de código no método viewDidLoad.

CGRect  frameAt = [self.view frame];
CGRect  statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
frameAt.origin.y += statusBarFrame.size.height;
[self.view setFrame: frameAt];

Não faz sentido para mim que essa seja a intenção do XCode e do Interface Builder, então suspeito que estou fazendo algo fundamentalmente errado com o SDK durante o design da minha visualização.Além disso, nas raras ocasiões em que não preciso mudar minha visão, realmente não sei qual é a diferença entre as duas abordagens de design.

Observe também que na maioria das vezes tento projetar minhas visualizações usando IB, com algumas pequenas customizações.

Alguém mais se deparou com isso e sabe o que fazer para corrigir sem esse esboço de código?

Foi útil?

Solução

Em vez de tentar ocultar os elementos não visíveis da IE / Windows, sugiro ter resultados de resultados e clonagem dos resultados da sua pesquisa para esse table e escondendo o outro.Desta forma, os únicos resultados disponíveis para serem selecionados são os que você deseja selecionar.

Outras dicas

A principal coisa a ter em mente aqui é que um controlador de visualização definirá a estrutura de sua própria visão. Isso ocorre porque a quantidade de espaço disponível para a visualização pode mudar durante a vida útil do aplicativo, e apenas o controlador de exibição sabe como ajustar o quadro da exibição adequadamente. Exemplos de quando a quantidade de alterações no espaço incluem a altura da alteração da barra de navegação, girando o dispositivo do retrato para a paisagem e a barra de status também pode aumentar a altura se o usuário estiver atendendo a uma chamada. Por isso, você não deve modificar o quadro da visualização.

Portanto, a primeira coisa que você precisa é remover todo o código relacionado à modificação do quadro da visualização.

Agora você precisa projetar suas opiniões com a mentalidade de que o tamanho do quadro pode mudar a qualquer momento. Isso significa definir corretamente a propriedade automática de cada subview. Se você fizer isso, não importará se você ativar as barras simuladas de navegação e status ou não; Eles estão lá apenas para ajudá -lo a ver como será o resultado final na maioria dos casos.

Você pode definir a propriedade automobilizando cada subview no interface Builder no inspetor de tamanho (aquele com o ícone do régua). Na animação, a caixa branca representa a visualização raiz do controlador de exibição, a caixa vermelha representa a subview atualmente selecionada. Você notará que a subview está ancorada no canto superior esquerdo da exibição raiz por padrão. Isso é bom se o tamanho da visão nunca mudar, mas sabemos que não é verdade. Se você tiver subviews que deseja aparecer no fundo sem matter-what, precisará brincar com o diagrama à esquerda. A maneira como funciona é se uma das quatro linhas ao redor da borda for selecionada, a distância entre a borda da vista da raiz e a borda da subview é fixa. Portanto, se você deseja que uma subview apareça na parte inferior, precisará garantir que a linha mais inferior seja selecionada e não a parte superior. As duas linhas no meio afetam se o tamanho da subview muda quando a visão da raiz muda o tamanho. Por exemplo, se você tivesse uma visualização de tabela de que queria ocupar toda a altura da tela, garantiria que a linha vertical interna fosse selecionada. Isso é chamado de modelo Struts and Springs.

Se você estiver adicionando subviews programaticamente, precisará definir a propriedade AutoreRizingMask em cada subview. Aqui está uma explicação.

Espero que ajude!

Texto do link

Um bug semelhante é discutido aqui.

Também está definida como não? Tente configurá -lo como sim, pois isso resolveu um problema semelhante que eu estava enfrentando.

A resposta de Moshy foi muito útil quando finalmente percebi o significado das linhas pontilhadas/sólidas em IB para controlar as propriedades de redimensionamento dos elementos UIView.

No entanto, ajustar essas propriedades não resolveu um problema semelhante que enfrentei com uma das minhas opiniões.Esta visualização tinha status e barra superior definidos no IB.Era um pouco pesado, contendo um UIWebView que carregaria uma string html dentro viewWillAppear e alguns outros elementos de interface.

Ao carregar a visualização, se o usuário alterasse repentinamente a orientação do dispositivo de retrato para paisagem, todo o conteúdo da visualização seria deslocado para baixo na altura da barra de status.A lacuna resultante entre os controles de visualização e sua parte superior permaneceria mesmo após voltar à orientação retrato.

O que finalmente resolveu meus problemas, e meu cabelo restante, foi adicionar a linha:

    self.view.frame = [[UIScreen mainScreen] bounds];

dentro de

-(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

Desde que o conteúdo da minha visualização é mantido no lugar, apesar das mudanças abruptas na orientação do dispositivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top