macos - what - 10.11 NSCollectionView-गतिशील रूप से सेल आकार का निर्धारण



what is apple safari (0)

ओएस एक्स v10.11 के लिए ऐपकिट रिलीज नोट्स से पता चलता है कि संग्रह देखने के आइटम प्रति-आइटम के आधार पर आकार बदल सकते हैं:

आइटम का आकार विश्वभर में कलेक्शनव्यू के सभी आइटमों (NSCollectionViewFlowLayout के "itemSize" प्रॉपर्टी सेट करके) के लिए निर्धारित किया जा सकता है, या एक आइटम से दूसरे को अलग किया जा सकता है (कार्यान्वयन करके -संग्रह करें: लेआउट: आकार ForItemAtIndexPath: आपके संग्रह दृश्य प्रतिनिधि पर)

मेरे मामले में, मेरे संग्रह वही आईटम में एक लेबल होता है जिसमें अलग-अलग लंबाई की एक स्ट्रिंग होती है। मैं NSCnlectionView का उपयोग स्ट्रिंग्स को प्रदर्शित करने के लिए कर रहा हूं, क्योंकि NSStackViews सरणी बाइंडिंग का समर्थन नहीं करते हैं, और नई लाइनों में प्रवाह नहीं करते हैं। तार की सरणी एक सरणी नियंत्रक के माध्यम से NSCollectionView की सामग्री के लिए बाध्य है।

मेरी आइटम की निब फाइल ठीक से सेट की गई है, रूट व्यू और लेबल दोनों में सामग्री गड़बड़ी और सामग्री संपीड़न प्रतिरोध 1000 की प्राथमिकताएं हैं, और किनारों को ऑटोलेआउट के माध्यम से गठबंधन किया गया है।

अब, NSCollectionViewLayout के प्रतिनिधि विधि में यह हस्ताक्षर है:

func collectionView(collectionView: NSCollectionView, 
                    layout collectionViewLayout: NSCollectionViewLayout, 
                    sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize

मेरा विचार है कि आइटम को खुद पकड़ लेना, उस पर एक लेआउट पास करना, और फिर नया आइटम आकार वापस करना।

let item = collectionView.itemAtIndexPath(indexPath)!
item.view.layout()
return item.view.bounds.size

इस दृष्टिकोण के साथ समस्या यह है कि itemAtIndexPath शून्य देता है अगर मैं शून्य के मामले में एक डिफ़ॉल्ट आकार वापस करता हूँ, तो यह डिफ़ॉल्ट आकार सभी कोशिकाओं के लिए उपयोग किया जाता है।

मैं अपने आइटम की ऑटोलायआउट बाधाओं का सम्मान करने के लिए और प्रत्येक सेल के लिए एनएससीोलप्लेव्यू दृश्य कैसे सेट कर सकता हूँ, गतिशील रूप से कम्प्यूटेड आकार का उपयोग करें?





nscollectionviewitem