Pergunta

Eu preciso entender como NSView autoresizes a sua vista. Eu configurei tudo em IB e meus subviews redimensionar bem (quando eu redimensionar minha janela por aí com um mouse). No entanto, se eu fizer [myMainView setFrame:] com o meu novo rect quadro, nada acontece. Todos os meus sub-vistas são ainda o tamanho original (embora a vista principal tem as dimensões corretas). resizeWithOldSuperviewSize: criança recebe chamados, mas ainda não é adequadamente médias.

Eu tenho uma tela-cheia de elementos de cacau na tela (tela # 1), etiqueta, imagem, vídeo. Há um layout bem definido para esses elementos. Eu tenho comportamento redimensionamento automático de configuração via Interface Builder que funciona muito bem. O redimensionamento da janela principal redimensionado os elementos de uma maneira satisfatória.

Agora, o usuário clica no botão "next", após um segundo screenfull de elementos (tela # 2), deve ser desenhado. Meus layouts são construídas com base em um screensize canônica (digamos, 800x600). Mas agora a janela é maior (ou menor), porque ele foi redimensionado na tela # 1. Assim, os elementos estão agora tendo apenas uma pequena área na janela, em vez de ser adequadamente dimensionados para preencher o espaço disponível. Quero escalar esses elementos.

Am I mal-entendido como o redimensionamento automático obras? Como posso acionar a maquinaria autoresize debaixo NSView manualmente?

Há duas coisas que posso fazer:

  1. manualmente redimensionar os elementos com base no tamanho da tela atual em relação ao tamanho original. Esta opção não é o meu favorito porque, aparentemente, eu sou forçado a reescrever o código que já está trabalhando em NSView (o comportamento redimensionamento automático
  2. Minha segunda opção é para invocar a magia redimensionamento automático o já mencionado de NSView. Documentação implica que [NSView setFrame:] vai fazer isso por mim. O que eu tentei foi, redimensionar meu ponto de vista de conteúdo para o screensize original (800x600), tornar meus elementos e, em seguida, redimensioná-la ao tamanho da janela atual. Conceitualmente, não é idêntico ao manualmente redimensionar a janela? Parece não ser. Mais uma vez, esta opção é preferível, porque minimiza a quantidade de código que tem te ser escrito e mantido.
Foi útil?

Solução 2

Acontece que a minha abordagem é correta. Eu estava definindo o tamanho do quadro para um valor incorreto, portanto, eu não estava recebendo o comportamento esperado. Doh.

Outras dicas

Este código

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

dá o resultado esperado:

[...] subview's frame before resizing: {{0, 0}, {100, 100}}
[...] subview's frame after  resizing: {{0, 0}, {200, 100}}

Seu problema está em outro lugar. Espero que um de seus pontos de vista do recipiente não é uma parte da vista hierarquia da janela no momento em que o redimensionamento ocorre.

Uma boa solução para o seu problema pode ser o uso de um NSTabView sem abas, porque então todos os seus pontos de vista estão em todos os momentos na janela (possivelmente oculto) eo TabView cuida do redimensionamento.

Outra solução é colocar vários pontos de vista em cima uns dos outros e uso setHidden: para mostrar apenas um.

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