2017-02-24 10 views
14

मैं यूआईसीओलेक्शन व्यू (लाल वाला) इस मामले में सामग्री आकार की ऊंचाई को कम करने के लिए चाहता हूं UICollectionViewCells (पीले रंग वाले) क्योंकि वहां बहुत खाली जगह है। हमेशा लौट (चौड़ाई, 0) और इस कारण के लिए यह बहुत ज्यादा है जो मुझे ऊंचाई के लिए xib फ़ाइल में सेट ऊंचाई 30 (मूल्य के मूल्य के लिए सिकुड़UICollectionView की सामग्री आकार की ऊंचाई होने के लिए UICollectionView की ऊंचाई समायोजित कैसे करें?

override func layoutSubviews() { 
    super.layoutSubviews() 
    if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) { 
     self.invalidateIntrinsicContentSize() 
    } 
} 

override var intrinsicContentSize: CGSize { 
    return self.collection.contentSize 
} 

लेकिन return self.collection.contentSize: क्या मैंने कोशिश की उपयोग करने के लिए है , हालांकि मेरे पास constaint> = 30 है)।

enter image description here

+0

आप ऊंचाई बाधा आउटलेट लेने के लिए है ColletionView की और ऊंचाई को समायोजित करें जैसे 'heightConstraint.constant = collectionView.contentSize.height' –

+0

क्या आप कस्टम लेआउट का उपयोग कर रहे हैं या Apple - UICollectionViewFlowLayout द्वारा प्रदान किए गए हैं? –

+0

मैं डिफ़ॉल्ट एक UICollectionViewFlowLayout – charbinary

उत्तर

32

मैं निम्नलिखित सुझाव है:

  1. अपने संग्रह दृश्य में ऊंचाई बाधा जोड़ें।
  2. अपनी प्राथमिकता 999 को सेट करें।
  3. किसी भी मूल्य पर स्थिरता सेट करें जो केवल स्टोरीबोर्ड पर उचित रूप से दिखाई देता है।
  4. संग्रह दृश्य के नीचे बराबर बाधा को अधिक या बराबर में बदलें।
  5. ऊंचाई की बाधा को आउटलेट में कनेक्ट करें।
  6. हर बार जब आप संग्रह दृश्य पर डेटा को फिर से लोड निम्न करें:

कोड नमूना:

CGFloat height = myCollectionView.collectionViewLayout.collectionViewContentSize.height 
heightConstraint.constant = height 
self.view.setNeedsLayout() Or self.view.layoutIfNeeded() 

स्पष्टीकरण: अतिरिक्त, आप अगर पढ़ने के लिए की जरूरत नहीं है तुम यह समझते हो। जाहिर है!!

यूआई सभी बाधाओं को प्रतिबिंबित करने का प्रयास करेगा चाहे इससे कोई फर्क नहीं पड़ता कि उनकी प्राथमिकताओं क्या हैं। चूंकि ऊंचाई की बाधा (999) की निचली प्राथमिकता है, और अधिक या बराबर प्रकार के नीचे की बाधा है। जब भी, ऊंचाई बाधा निरंतर माता-पिता दृश्य ऊंचाई से कम मान पर सेट होती है, संग्रह दृश्य दोनों बाधाओं को प्राप्त करने, दी गई ऊंचाई के बराबर होगा।

लेकिन, जब ऊंचाई की बाधा लगातार पैरेंट दृश्य ऊंचाई से अधिक मूल्य पर सेट होती है तो दोनों बाधाओं को हासिल नहीं किया जा सकता है। इसलिए, केवल उच्च प्राथमिकता के साथ बाधा हासिल की जाएगी जो अधिक या बराबर नीचे बाधा है।

निम्नलिखित अनुभव से सिर्फ एक अनुमान है। तो, यह एक कंसट्रेंट प्राप्त करता है। लेकिन, यह त्रुटि को अन्य गैर-प्राप्त निम्न प्राथमिकता बाधा के रूप में संभवतः न्यूनतम के लिए यूआई में बनाने की कोशिश करता है। इसलिए, संग्रह दृश्य ऊंचाई माता-पिता दृश्य आकार के बराबर होगी।

+1

सही उत्तर बहुत बहुत धन्यवाद !!! – karenms

+0

@ हैसन 83, ब्रो क्या आप मेरी समस्या पर एक नज़र डालें https://stackoverflow.com/questions/46034278/how-to-adjust-uiview-height-according-to-the-collection-view-content-height- इन-एस? noredirect = 1 # comment79054393_46034278? –

+0

मेरा कुछ हद तक विस्तारित है लेकिन सही नहीं है। यह लेबल की लगभग 3 4 लाइनों को याद करता है। कोई उपाय? यहां बताया गया है कि यह कैसा दिखता है: https://ibb.co/jeO9Rv https://ibb.co/iV8b6v – Nil

0

कोशिकाओं के सभी calculate संख्या के पहले की तुलना में यह सेल की ऊंचाई के साथ गुणा और फिर इस पद्धति में लौट ऊंचाई

collectionView.frame = CGRectMake (x,y,w,collectionView.collectionViewLayout.collectionViewContentSize.height); //objective c 
    //[collectionView reloadData]; 
    collectionView.frame = CGRect(x: 0, y: 0, width: width, height: collectionView.collectionViewLayout.collectionViewContentSize.height) // swift 
+0

यह विधि इंडेक्स पथ पर किसी विशिष्ट सेल के लिए आकार लौटाती है, यदि आप ऊंचाई को नोऑफेल * ऊंचाई पर सेट करते हैं तो यह सभी कोशिकाओं की ऊंचाई निर्धारित करेगा। –

+0

@Georgi Boyadzhiev, यह सच है। – charbinary

1

निम्न कार्य करें सामग्री आकार के बराबर के रूप में ऊंचाई बाधा सेट करना होगा।

  1. पहला सेट ऊंचाई UICollectionView
  2. यहाँ calendarBaseViewHeight के लिए विवश UICollectionView ऊंचाई चर
  3. कॉल समारोह के बाद फिर से लोड संग्रह दृश्य है

    func resizeCollectionViewSize(){ 
         calendarBaseViewHeight.constant = collectionView.contentSize.height  
    } 
    
संबंधित मुद्दे