2016-09-29 115 views
9

由於每次升級到Mac OS塞拉利昂和新的XCode版本我碰到下面的錯誤我啓動我的應用程序的NSToolbarItems的每一個:NSToolbarItem:「確保此工具欄項目具有有效幀/最小/最大大小」?

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 

我試着在故事板瞎搞沒有運氣改變大小,當我搜索周圍時,我發現有幾個人有這個問題以及新的操作系統,但沒有有用的答案。

任何人都面臨同樣的問題,有什麼建議嗎?

非常感謝,

馬克

回答

1

無法在界面生成器中解決此問題。但是在NSToolbarItem的子類中覆蓋minSize解決了這個問題。

- (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]; 
    } 
} 
+0

感謝您的支持!問題消失了! – MMV

0

本來我想這個(見下文思想更新):

http://cocoa-dev.apple.narkive.com/iSLaiCLR/strange-toolbar-item-error

彙總:

我的選擇是:

  • 如上所述更改最大大小,並使工具欄項可能顯示錯誤的大小pre-Sierra;

  • 忽略警告,並在每個版本中顯示所有內容;

還要注意的是:

我 以爲我已經試過這沒有成功,直到我意識到什麼是 發生的事情:我編輯的值,然後關閉工具欄編輯器在IB中。 我現在已經意識到這些更改沒有被保存;當我重新打開工具欄編輯器 時,舊值仍顯示出來。與 運行一次的工具欄編輯器中打開似乎已經做出了改變「拿」。(是的, 我試圖在不同階段的清潔。)

UPDATE 2016年12月-------

出於某種原因minSize屬性仍然隨機時間變化的時間,最後我掛這一切NSToolBarItems到下面的類,這已修復它爲我:

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 
     } 
    } 

} 
1

對於我來說,改變最大大小如上所述的NSToolbaritem不起作用。 但改變最小它的大小做了伎倆。警告信息現在消失了。

+0

確實,對我來說都是。感謝澄清vomi。 – MMV

0

實際上我在這個問題上浪費了更多的時間,但是擺脫警告是我的一件事。對我來說,無論我更改工具欄按鈕的最小/最大尺寸,它都會抱怨大小不正確的一個或兩個像素。我意外地偶然發現了以下解決方法。我的按鈕使用「常規」控制尺寸。在IB中,我將每個NSButton從Regular更改爲Small,Small更改爲Mini,然後Mini更改爲Regular。然後,我將每個向上的最小高度調整爲小於最大值的兩倍。我不確定過程中發生了什麼。可能有一個更簡單的解決方案,但我現在已經做了我的故事板,我仍然屏住呼吸,警告不會回來!

0

發現問題了!問題是,在Xcode中的IB中,minSize字段僅綁定到XIB源的單向。如果您在IB中更改NSToolbarItem minSize,它會適當地保存它。但是,如果重新打開面板,可以重新打開Xcode,重新打開項目或者重新打開屬性面板,它會再次顯示默認值。因此,即使XIB文件(XML)的源顯示W 129 H 27(無論您上次嘗試設置的值),此時屬性面板可能會顯示W 127 H 25。因此,Xcode IB的「屬性」面板中的minSize字段值設置不正確。這會導致在重新打開NSToolbarItem的「屬性」面板後保存的混淆情況,您的更改將被重寫。這似乎是一個Xcode錯誤。 @Marius的答案解決了這個運行時問題,另一個解決方案是在設置minSize之後不再打開NSToolbarItem屬性。