2016-12-05 9 views
6

मैंने देखा कि कोशिकाएं हमेशा आकार निरीक्षक की परिभाषा का पालन करेंगी। यहां तक ​​कि अगर मैंने पहले से ही UICollectionViewDelegateFlowLayout लागू किया है।डिवाइस स्क्रीन आकार के अनुसार संग्रह दृश्य कक्ष का आकार कैसे बदलें?

enter image description here

enter image description here

तो यह है कि यह कैसे दिखता है। लेकिन मैं चाहता हूं कि कोशिकाएं इस तरह दिखें कि यह एक छोटी आईफोन स्क्रीन पर कैसा था।

enter image description here

+0

क्या आप तेजी से उपयोग कर रहे हैं? –

+0

आपको सेल निर्माण के लिए पर्यवेक्षक से गुणक का उपयोग करना होगा, इससे स्क्रीन आकार के अनुसार स्वचालित रूप से समायोजित हो जाएगा। –

+0

हाँ मैं तेजी से उपयोग कर रहा हूँ। मैंने कुछ भी देखा, संग्रह दृश्य कोशिकाएं आकार निरीक्षक में परिभाषित सेल आकार का पालन करती प्रतीत होती हैं। यहां तक ​​कि यदि मैं संग्रहViewLayout का उपयोग कर सेल का प्रोग्राम रूप से आकार बदलता हूं। –

उत्तर

16
- (CGSize)collectionView:(UICollectionView *)collectionView 
       layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

    CGFloat height = self.view.frame.size.height; 
    CGFloat width = self.view.frame.size.width; 
    // in case you you want the cell to be 40% of your controllers view 
    return CGSizeMake(width*0.4,height*0.4) 
} 
+0

का उपयोग करके प्रोग्राम का आकार बदलता हूं, तो क्या मैं इस कोड को func collectionView (संग्रह दृश्य: यूआईसीओलेक्शन व्यू, लेआउट संग्रहव्यूलाउट: यूआईसीओलेक्शन व्यूलाउटआउट, आकारफॉरटैमएट इंडेक्सपैथ इंडेक्सपाथ: एनएसआईएनडीएक्सपाथ) -> CGSize ......? –

+2

इसकी एक UICollectionViewDelegateFlowLayout विधि है। UICollectionViewDelegateFlowLayout UICollectionViewDelegate से विरासत प्राप्त करता है जिसका अर्थ है कि आपको इस विधि को लागू करना चाहिए और इस विधि को जोड़ने के बाद प्रोटोकॉल UICollectionViewDelegate को UICollectionViewDelegateFlowLayout में बदलना चाहिए, अन्यथा इस विधि को –

+0

नहीं कहा जाएगा, मैंने कुछ भी देखा है, संग्रह दृश्य कक्ष आकार निरीक्षक में परिभाषित सेल आकार का पालन करना प्रतीत होता है। यहां तक ​​कि यदि मैं संग्रह का उपयोग कर सेल का आकार बदलता हूं, तो VisualViewLayout –

2

एक तरह से यह सेल के पहलू अनुपात को बनाए रखने और इस तरह आकार देना है क्या करने के लिए:

func collectionView(_ collectionView: UICollectionView, 
        layout collectionViewLayout: UICollectionViewLayout, 
          sizeForItemAt indexPath: IndexPath) -> CGSize { 
    if (screenheight < 667) { 
     return CGSize(width: 155, height: 200) 
    } else if (screenheight < 736) { 

     return CGSize(width: 182, height: 220) 

    } else { 
     return CGSize(width: 200, height: 230) 

    } 
} 
+0

मैंने कुछ भी देखा, संग्रह दृश्य कोशिकाएं आकार निरीक्षक में परिभाषित सेल आकार का पालन करती प्रतीत होती हैं। यहां तक ​​कि यदि मैं संग्रहव्यूलाइट –

2

आप जब इतनी तरह के बजाय अपने सेल आकार सेट संख्या का एक सरल समीकरण का उपयोग कर की कोशिश करनी चाहिए :

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize(width: view.frame.width/2, height: 350) 
    } 

2 से विभाजित मतलब यह होगा कि सेल हमेशा स्क्रीन आकार का आधा हो, दूर ले और minimumLineSpacing समारोह की तरह एस और/या और UIEdgeInset विधियों जिन्हें आपने बुलाया है। उम्मीद है की यह मदद करेगा।

+0

का उपयोग करके सेल का प्रोग्राम रूप से आकार बदलता हूं, तो मैंने कुछ भी देखा है, संग्रह दृश्य कक्ष आकार निरीक्षक में परिभाषित सेल आकार का पालन करना प्रतीत होता है।यहां तक ​​कि यदि मैं संग्रहव्यूलाइट –

0

तेज 3 में, आप स्क्रीन collectionViewLayout संपत्ति का उपयोग कर के अनुसार संग्रह दृश्य सेल आकार बदल सकते हैं।

आईई।

let numberOfCell = 3 
    let cellSpecing = 10 
    if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout { 
     layout.itemSize = CGSize(width: (screenSize.width - (cellSpecing * (numberOfCell + 1)))/numberOfCell, height: cellHeight) 
     layout.invalidateLayout() 
    } 
0
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    let theWidth = (_screenSize.width - (15*3))/2 // it will generate 2 column 
    let theHeight = (_screenSize.height - (10*2))/3 // it will generate 3 Row 
    return CGSize(width: theWidth ,height: theHeight) 
} 
+0

मैंने कुछ भी देखा, संग्रह दृश्य कक्ष आकार निरीक्षक में परिभाषित सेल आकार का पालन करना प्रतीत होता है। यहां तक ​​कि यदि मैं संग्रहViewLayout का उपयोग कर सेल का प्रोग्राम रूप से आकार बदलता हूं –

1

मेरे अनुभव के अनुसार आप डिवाइस विशिष्ट संग्रह दृश्य सेल के आकार पाने के लिए विधियों के नीचे प्रति के रूप में आप गतिशील चौड़ाई & संग्रह दृश्य सेल की ऊंचाई प्राप्त कर सकते हैं UICollectionView तरीकों का उपयोग करने के लिए है।

// Dynamic width & height 
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    float cellSize = collectionView.frame.size.width/values.count; 
    return CGSizeMake(cellSize - 10, collectionView.frame.size.height); 
} 

//For top/bottom/left/right padding method 
- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(0, 0, 0, 1); 
} 



- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { 
    float width = collectionView.frame.size.width; 
    float spacing = [self collectionView:collectionView layout:collectionViewLayout minimumInteritemSpacingForSectionAtIndex:section]; 
    int numberOfCells = (width + spacing)/(cellSize + spacing); 
    int inset = (width + spacing - numberOfCells * (cellSize + spacing))/2; 

    return UIEdgeInsetsMake(0, inset, 0, inset); 
} 
- (CGFloat)collectionView:(UICollectionView *) collectionView layout:(UICollectionViewLayout *)collectionViewLayout 
minimumInteritemSpacingForSectionAtIndex:(NSInteger) section 
{ 
    return 1.0; 
} 

आशा है कि इससे आपको डिवाइस के आकार के आधार पर आपके सेल को डिज़ाइन करने में मदद मिलेगी।

2

स्विफ्ट 4

आप कुछ इस तरह कर सकते हैं:

class yourClassName: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
      return CGSize(width: self.myCollectionView.frame.height/6 * 5, height: self.myCollectionView.frame.height/6 * 5) 

     } 


} 

self.myCollectionView आप से संदर्भ संग्रह दृश्य मद है
यह UICollectionViewDelegateFlowLayout

लागू करने के लिए और क्योंकि यह फिट नहीं करेंगे एक और सेल आपके पास केवल एक पंक्ति होगी।

संबंधित मुद्दे