2014-01-08 167 views
5

我想實現一個簡單的NSViews的堆疊安排,併爲此我使用綁定到字典控制器的NSCollectionView。結果我至今低於:NSCollectionView自動調整子視圖與自動佈局

Normal

左邊的標籤綁定到控制器項目鍵和SegmentedControl selectedIndex設置爲項目值。

問題是,我不知道如何強制NSCollectionView內的子視圖符合容器寬度;發生的事情是,他們維護自己的寬度,當NSCollectionView變得似乎過於狹窄水平滾動條,如下圖所示:

enter image description here

我知道this question(和「逆」,this one),和我」對於Autolayout,除了瑣碎的事情之外,我從來沒有用過很多東西。我想知道AutoLayout帶來的所有幻想,有沒有辦法處理這個問題,而不訴諸於編碼和使用事件/通知? (據我所知,觀察NSViewFrameDidChangeNotification是一個另類吧?)

感謝

+0

你能夠得到這個工作?我想知道是否有辦法從IB那裏做到這一點。 – tofutim

回答

1

的解決方案是在實際上很簡單:切換到基於視圖的NSTableViewNSCollectionView不適用於問題中描述的用途。通過NSTableView,您可以獲得默認和免費的調整大小行爲。

無論你使用綁定還是數據源,它都可以工作,它並不重要。

+0

它也適用於高度,不僅寬度? – gaussblurinc

+0

不確定你的意思到底是什麼?你能澄清嗎? – insys

+0

我的意思是iOS'self.tableView.rowHeight = UITableViewAutomaticDimension;'。macOS有沒有其他選擇? – gaussblurinc

1

只是做一些非常相似 - 除了使用NSSplitView子類 - 所以,如果我正確地理解你的問題,你會想在設置限制子視圖附加到您的上海華兩側是這樣的:

NSDictionary * viewsDict = NSDictionaryOfVariableBindings(filler); 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[filler]|" 
                  options:0 
                  metrics:nil 
                   views:viewsDict]]; 

你也可能與你的子視圖的內容壓縮性優先參數,以達到理想的效果搗鼓。

還要注意的是針對OS X 10.9時,專門有一個新的NSStackView類:

NSStackView是在OS X 10.9的新類它是用來佈局使用自動佈局視圖水平或垂直堆疊。必要的約束將被自動創建並添加和移除從堆疊視圖視圖來保持內聚佈局時修改

+1

感謝您的回答。我完全忘了提及我使用綁定(編輯的問題),這是我想繼續使用NSCollectionView的原因之一(它非常易於使用)。我玩了一下內容壓縮阻力優先級,將它設置爲一個較低的值(<500,如[這裏]所述(http://stackoverflow.com/questions/15850417/cocoa-autolayout-content-hugging-vs-content - 壓縮阻力優先)),但沒有任何改變...它似乎爲CollectionView的孩子不同的規則適用? – insys

+0

有沒有辦法從IB設置它? – tofutim