2016-08-01 12 views
10

मैं एक आईओएस एप्लिकेशन विकसित कर रहा हूं जो सर्वर से पोस्ट को UICollectionView में लोड करता है। संग्रह दृश्य कक्ष में UIImageView शामिल है जो सेल के नीचे तय किया गया है।संग्रह दृश्य कक्ष छवियों को सही ढंग से लोड नहीं कर रहे हैं

UICollectionViewCell

जब भी मैं आवेदन और संग्रह दृश्य लोड शुरू, सभी छवियों को सही ढंग से, लेकिन पिछले छवि है, जो सही आयाम है के लिए लोड न करें। सभी कोशिकाओं को उसी तरह स्वरूपित किया जा रहा है।

UICollectionView

मैं समाधान लेकिन कुछ भी की एक भीड़ अब तक काम किया है की कोशिश की है।

मुझे क्या संदेह है कि छवियां प्रत्येक सेल के UIImageView (इस मामले में अंतिम को छोड़कर) पर सेट होने से पहले लोडिंग समाप्त नहीं हुई हैं। यह हालांकि संभव प्रतीत नहीं होता है के रूप में कोशिकाओं एक सफल प्रतिक्रिया प्राप्त करने के बाद पुनः लोड कर रहे हैं ..

यह उस विशेष समारोह (Alamofire का प्रयोग करके) के लिए मेरे कोड

func getAllPosts(){ 

    let url = "\(Constants.baseURL)/posts/" 
    let parameters = ["user_id": "\(userProfile!.getId())"] 

    Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON) 
     .validate(contentType: ["application/json"]) 
     .responseString { response in 
      switch response.result { 

      case .Success: 

       var postsArray = Array<[String: AnyObject]>() 

       do { 

        let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: NSJSONReadingOptions.MutableContainers) 



        for post in json as! [AnyObject] { 

         postsArray.append(post as! [String: AnyObject]) 

        } 

        //invert array of posts so that latest load first! 

        postsArray = postsArray.reverse() 

       } catch { 

       } 

       //convert json to Post objects and reload the view 

       self.initialisePosts(postsArray) 

       self.collectionView?.reloadData() 


      case .Failure(let error): 
       print(error) 
      } 
    } 
} 

सभी मदद की सराहना की है।

संपादित करें: नीचे वर्तमान बाधाओं UIImageView पर

Constraints

संपादित 2 हैं: का उपयोग करते हुए @ माइकल की सलाह मेरे पास है: यहाँ कोशिकाओं

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    // get a reference to our postcell with no image 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifiers[0], forIndexPath: indexPath) as! PostCell 

    guard let _: Post? = posts[indexPath.row] else { 
     return cell 
    } 

    return configurePostCell(cell, post: posts[indexPath.row])! 
} 

func configurePostCell(cell: UICollectionViewCell, post: Post) -> PostCell?{ 
    if let cell = cell as? PostCell { 

     cell.author.text = post.user_name 
     cell.date.text = formatter.stringFromDate(post.pub_date!) 
     cell.desc.text = post.desc 


     cell.layer.cornerRadius = 5 //set corner radius here 

     cell.advertImage.image = post.advert?.advert_image 


     return cell 
    } 

    return nil 
} 

अद्यतन फ़ॉर्मेट करने के लिए कोड है पाया गया कि सेल छवियां सही ढंग से लोड हो रही हैं ..

Correctly loading image

लेकिन है कि सेल ऊंचाई रहस्यमय तरीके से 50px द्वारा काटी जा रही है ..

स्टोरीबोर्ड संपादक सेल के आकार रन-टाइम में

Storyboard editor cell size

सेल आकार

Cell size at run-time

ऐसा लगता है लेकिन मुझे अभी तक कोई समाधान नहीं मिला है।

अद्यतन: बकाया पर दो घंटे शेष के साथ मैंने इसे @ माइकल को पुरस्कृत करने का निर्णय लिया है क्योंकि उनके जवाब ने मुझे मेरी समस्या की और जांच करने में मदद की, जो अभी भी चल रहा है।

+1

कहाँ संग्रह देखने के लिए छवियों को स्थापित करने के लिए अपने कोड है? क्या आपने UIImageView के लिए ऊंचाई बाधा दी है? –

+0

ओह हाँ क्षमा करें, मैं उस जानकारी को शामिल करने के लिए अब प्रश्न संपादित कर दूंगा। – Danoram

+0

इसे मुख्य_क्यू –

उत्तर

3

सबसे पहले, रनटाइम पर तालिका कक्षों में विसंगतियों की जांच के लिए डीबग व्यू पदानुक्रम बटन का उपयोग करें।

फिर सेल निर्माण पर ब्रेकपॉइंट करें और उस यूआईएममेज का निरीक्षण करें जिसे आप सेल पर सेट करने वाले हैं और सुनिश्चित करें कि आकार सही है। यदि आप उस छवि को असाइन करते हैं जिसे आपने स्थानीय चर में डाउनलोड किया है तो आप शायद यह भी देख सकते हैं कि यह सही दिखता है या नहीं।

फिर, यदि सभी समझदार लगते हैं, तो अपने ऑटो-लेआउट कोड को मजबूत बनाएं।

स्थिति से छवियों को डाउनलोड करने से हटाकर जांचें। सब पर छवि के

  1. निकालें सेटिंग, लेकिन UIColor.Red या कुछ और करने के लिए छवि पृष्ठभूमि सेट और वे सभी लेआउट अच्छी तरह से रूप में छोटे सामान्य UIViews की तुलना में अधिक जाँच: मैं इस करना होगा।
  2. ऐप बंडल में एक पीएनजी के रूप में एक छवि एम्बेड करें और डाउनलोड की गई छवि के बजाय इसे सेट करें। फिर, देखें कि यह कैसे प्रस्तुत करता है।
  3. एप्लिकेशन बंडल में एक अलग आकार छवि की कोशिश करो और फिर से जांच - कि सब अच्छा लग रहा है, तो (यदि प्रासंगिक हो सकता है आपके सभी छवियों को एक ही आकार वैसे भी कर रहे हैं)

, तो आप जानते हैं कि यह डाउनलोड करने या लेआउट के आसपास है उन सर्वर छवियों का।

+0

हाय माइकल। आपके सुझाव के लिए धन्यवाद! मैंने डीबग व्यू हिएराची का उपयोग करने में कामयाब रहा है कि कोशिकाओं को वास्तव में 50 पीएक्स द्वारा फसल लगाया जा रहा है। मैंने अपना प्रश्न अपडेट कर लिया है। – Danoram

+0

क्या वह पहलू अनुपात बाधा सही है? ऐसा लगता है कि 15: 4 300 की सेल चौड़ाई के लिए 80 की छवि ऊंचाई उत्पन्न करेगा (माना जाता है कि जब आप इसे चलाते हैं तो कक्ष 300 अंक चौड़े होते हैं)। क्या वह छवि ऊंचाई जिसकी आप उम्मीद कर रहे थे? (300/15) * 4 = 80 – Michael

+0

हां छवि की ऊंचाई '300' की सेल चौड़ाई के लिए' 80px' होगी, लेकिन वर्तमान में केवल '30px' की दृश्य ऊंचाई है क्योंकि सेल को '50px' तल पर। मैं कस्टम आकार को '300x250' पर सेट करने में सक्षम नहीं लगता क्योंकि यह रनटाइम पर' 300x200' पर वापस आ जाता है .. – Danoram

0

बदलें 15: एक लगातार ऊंचाई (80px), और heightForRowAtIndexPath सेट एक लगातार ऊंचाई के लिए 4Ratio (250px)

+0

यह काम करेगा, हालांकि आपको अनुपात बाधा को हटाने की आवश्यकता नहीं है, जब तक कि यह होना आवश्यक न हो एक निश्चित 80 बिंदु कोई फर्क नहीं पड़ता कि स्क्रीन का आकार क्या है। यदि यह है, तो यह करने के लिए पूरी तरह से सही बात है। लेकिन अगर आप स्क्रीन चौड़ाई के आधार पर कोशिकाओं को स्केल करना चाहते हैं तो आपको table.rowHight को UITableViewAutomaticDimension और अनुमानित RowHeight 250 पर सेट करना चाहिए। (Https: //www.raywenderlich देखें।कॉम/12 9 0 9 5/स्वयं-आकार-तालिका-दृश्य-कोशिकाएं) – Michael

+0

मैं ऊंचाई निर्धारित करूंगा ForRowAtIndexPath SCREEN_WIDTH/अनुपात अनुपात के साथ छवि सेट करें –

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