NSToolbarItem: “Certifique-se de que este item da barra de ferramentas tenha um frame / min / max size válido”?

9

Desde a atualização para o Mac OS Sierra e a nova versão do XCode, recebo o seguinte erro toda vez que eu inicio meu aplicativo para cada um dos NSToolbarItems:

Example 1:
2016-09-29 12:46:58.659879 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSPopUpButton: > from {130, 26} to the expected size of {132, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint
Example 2:
2016-09-29 12:46:58.666074 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSButton: > from {60, 25} to the expected size of {62, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint

Eu tentei mexer no StoryBoard mudando o tamanho sem sorte, quando eu pesquisei ao redor, encontrei algumas pessoas tendo esse problema também com o novo sistema operacional, mas sem respostas úteis.

Alguém que enfrenta o mesmo problema, algum conselho?

Muito obrigado,

Marc

    
por MMV 29.09.2016 в 13:01
fonte

5 respostas

1

Não foi possível resolver isso no construtor de interface. No entanto, substituir minSize na subclasse de NSToolbarItem resolveu o problema.

- (NSSize)minSize
{
    if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) {
        /* Overriding this getter seems to be the only solution for runtime error logs like: NSToolbarItem (<APMRegularToolbarItem: 0x60e000039460>) had to adjust the size of <NSButton: 0x60f0001acce0> from {40, 25} to the expected size of {42, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint
         */
        return NSMakeSize(42, 27);
    }
    else {
        return [super minSize];
    }
}
    
por Marius 19.12.2016 / 11:53
fonte
1

Para mim, alterar o tamanho máximo do NSToolbaritem como mencionado acima não funcionou. Mas mudar o tamanho mínimo disso funcionou. A mensagem de aviso desapareceu.

    
por vomi 04.11.2016 / 09:16
fonte
0

Na verdade, eu perdi muito mais tempo do que deveria ter sobre esse assunto, mas livrar-se de avisos é uma das minhas coisas. Para mim, não importa o que eu mudei para o tamanho min / max do botão da barra de ferramentas, ele reclamou que os tamanhos estavam incorretos em um ou dois pixels. Eu acidentalmente tropecei na seguinte solução alternativa. Meus botões usam o tamanho de controle 'Regular'. No IB, eu mudei cada NSButton de Regular para Small, Small para Mini, e depois Mini de volta para Regular. Em seguida, ajustei a altura mínima de cada NSToolbarItem para cima para ser dois a menos que o máximo. Não tenho certeza do que realmente aconteceu no processo. Pode haver uma solução mais simples, mas agora eu cometi meu storyboard e ainda estou prendendo a respiração para que os avisos não voltem!

    
por Chuck H 03.12.2016 / 23:07
fonte
0

Originalmente eu tentei isso (veja a atualização abaixo):

link

Resumindo:

  

Minhas opções são:

     
  • Altere o tamanho máximo como acima e os itens da barra de ferramentas podem aparecer com o tamanho errado antes da serra;

  •   
  • Ignore o aviso e faça com que tudo apareça como deveria em cada versão;

  •   

Observe também que:

  

eu   pensei que eu já tinha tentado isso sem sucesso, até que eu percebi o que era   acontecendo: eu editei os valores e fechei o editor da barra de ferramentas no IB.   Agora percebi que as mudanças não estavam sendo salvas; quando reabri   o editor da barra de ferramentas, os valores antigos ainda estavam sendo exibidos. Correndo uma vez com   o editor da barra de ferramentas aberto parece ter feito as mudanças "tomar" (e sim,   Eu tentei limpar em vários estágios.)

ATUALIZAR dezembro de 2016 -------

Por alguma razão, o minSize ainda estava mudando aleatoriamente de tempos em tempos. No final, eu vinculei todos os NSToolBarItems à seguinte classe, isso corrigiu para mim:

    import Cocoa

    class ToolbarItemAvoidMinWarningIssue: NSToolbarItem {

    var widthT: CGFloat = 60
    var heightT: CGFloat = 27

    override var minSize: NSSize{
        get {
            return NSSize(width: widthT, height: heightT)
        }
        set {
            widthT = newValue.width
        }
    }

}
    
por MMV 29.09.2016 / 13:12
fonte
0

Encontrei o problema! O problema é que no IB no Xcode, os campos minSize são ligados apenas de uma forma à fonte XIB. Se você alterar o minSize NSToolbarItem no IB, ele salvará apropriadamente. Mas, se você reabrir o painel, reabrindo o Xcode, reabrindo o projeto ou até mesmo reabrindo o painel de propriedades, ele mostrará os valores padrão novamente. Portanto, o painel de propriedades neste ponto pode mostrar W 127 H 25 mesmo que a origem do arquivo XIB (o XML) mostre W 129 H 27 (quaisquer valores que você tenha tentado definir na última vez). Portanto, os valores do campo minSize no painel Propriedades do Xcode IB não estão definidos corretamente. Isso leva à situação confusa de que, após a reabertura do painel Properties do NSToolbarItem, suas alterações serão sobrescritas novamente. É um bug do Xcode, parece. A resposta de @Marius resolve este runtime, a outra solução não é abrir as propriedades NSToolbarItem novamente depois de definir o minSize.

    
por Joeri van Veen 29.01.2017 / 17:19
fonte