Problema de redimensionamento com um nsview de hospedagem de camada
-
26-09-2019 - |
Pergunta
Eu tenho um nsview de hospedagem em camada (-isflipped = sim) com três subviews de hospedagem de camadas. As subvisões são um cabeçalho, uma área de conteúdo e um rodapé. O cabeçalho possui um triângulo de divulgação que desmoronará a visualização de conteúdo e apenas mostrará o cabeçalho e o rodapé presos.
Eu posso realizar isso com bastante facilidade com a animação central, mas há um problema estranho acontecendo quando redimenso a visão. Se eu redimensionar a visualização horizontalmente, quero que as três subviews correspondam à nova largura. Se eu redimensioná -lo verticalmente, quero que as subviews fiquem onde estão (ou seja, a borda inferior da vista deve ser capaz de se mover sem afetar a posição da subjusta (exceto o corte de claro). O motivo disso é que eu preciso entrar em colapso O tamanho da visualização quando o ContentView está desbotado.
O que está realmente acontecendo é que todas as três subvisões estão sendo empurradas acima da parte superior da vista quando a altura é alterada ... e depois se encaixa no lugar quando a horizontal é alterada. Tem algo a ver com a combinação da visualização e das subviews, porque se as subviews forem colocadas diretamente na janela, elas se comportam corretamente. Além disso, tentei adicionar um botão à exibição e ele se comporta normalmente.
Consegui fazer com que o botão se comportasse mal da mesma maneira, tornando-o apoiado por camada também ... então acho que o apoio da camada tem algo a ver com isso.
É como se as camadas de apoio estivessem presas na visão dos pais à medida que ela redimensiona e sendo empurrada, mesmo que as coordenadas sejam invertidas.
Alguma ideia?
Solução
As visualizações de hospedagem em camada não devem ter subviews. Veja -(void) SetwantsLayer: Documentação na classe NSView Referência:
A visão raiz talvez deva ser uma visualização apoiada em camada em vez de uma camada que hospeda uma?