मैं यूआईसीओलेक्शन व्यू में सेल्स की ऊंचाई को कैसे सेट करना चाहता हूं, जो संग्रह दृश्य की ऊंचाई के बराबर है? नीचे दिया गया कोड काम नहीं करता है क्योंकि संग्रह दृश्य ऊंचाई इस बिंदु पर ज्ञात नहीं है क्योंकि ऐसा लगता है क्योंकि ऑटो लेआउट इस चरण में गुणों के साथ गड़बड़ कर रहा है। यह कोशिकाओं की ऊंचाई वास्तविक संग्रह दृश्य से अधिक होने का कारण बनता है।यूआईसीओलेक्शन व्यूसेल और यूआईसीओलेक्शन व्यू की समान ऊंचाई
मैं इस जवाब को हल करने के लिए 300 में बाउंटी में जोड़ दूंगा!
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: collectionView.frame.size.height)
}
2015-12-16 18: 43: 53.643 मेरे एप्लिकेशन के अंतर्गत [1055: 434,762] के व्यवहार में प्रवेश क्योंकि कोड hereUICollectionViewFlowLayout परिभाषित नहीं है: 2015/12/16 18: 43: 53.643 माई-ऐप [1055: 434762] आइटम की ऊंचाई की तुलना में कम होनी चाहिए UICollectionView से कम से कम अनुभाग नीचे और नीचे मानों को कम करता है, सामग्री को शीर्ष और नीचे मानों को कम करता है। 2015-12-16 18: 43: 53.643 माई ऐप [1055: 434762] कृपया प्रतिनिधि द्वारा मूल्यों की जांच करें। 2015-12-16 18: 43: 53.644 मेरा ऐप [1055: 434762] प्रासंगिक UICollectionViewFlowLayout उदाहरण है, और यह संलग्न है; परत =; सामग्री ऑफ़सेट: {0, 0}; सामग्री आकार: {3087, 307}> संग्रह दृश्य लेआउट:। 2015-12-16 18: 43: 53.644 मेरा ऐप [1055: 434762] पर एक प्रतीकात्मक ब्रेकपॉइंट बनाएं डीबगर में इसे पकड़ने के लिए UICollectionViewFlowLayoutBreakForInvalidSizes पर।
समाधान जो हैनड्स सुझाव के आधार पर काम करता है। यदि बेहतर तरीके हैं तो कृपया मुझे बताएं
एक संपत्ति पर्यवेक्षक के साथ एक संपत्ति बनाई।
var myCollectionViewHeight: CGFloat = 0.0 {
didSet {
if myCollectionViewHeight != oldValue {
myCollectionView.collectionViewLayout.invalidateLayout()
myCollectionView.collectionViewLayout.prepareLayout()
}
}
}
अवहेलना इस विधि (यह कहा जाता है कई बार)
override func viewDidLayoutSubviews() {
myCollectionViewHeight = myCollectionView.bounds.size.height
}
तब मैं अपने प्रतिनिधि में यह है:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: myCollectionViewHeight)
}
यह काम करने से बहुत दूर नहीं है। मैं अपने प्रश्न को पूर्ण उत्तर से अपडेट कर दूंगा। – LuckyLuke
ध्यान दें कि यह शुरुआत में एक बार संग्रह दृश्य को लेआउट करेगा, और एक बार लेआउट को अमान्य करने के बाद। सबसे कुशल समाधान नहीं है, लेकिन मुझे पता है कि एक। आपके अपडेट की प्रतीक्षा कर रहे हैं। – hannad
@ लकी ल्यूक आपने उल्लेख किया कि 'viewDidLayoutSubviews' को कई बार कहा जाता है। मुझे लगता है कि 'didSet' को हर बार' myCollectionViewHeight' सेट किया जाता है, भले ही यह वही मान हो। क्या आप यह निर्धारित करने के लिए 'myCollectionViewHeight'' myCollectionView.bounds.size.height' के बराबर नहीं है, यह जांचने के लिए कोई कथन जोड़ सकता है? इससे मदद मिल सकती है। – hannad