2012-04-10 18 views
7

के रूप में मैं रन टाइम पर छवि के URL हो रही है और मैं एक तालिका में & प्रदर्शन इन छवियों को डाउनलोड करने के लिए चाहते हैं। छवियों को असीमित रूप से डाउनलोड करने जा रहे हैं। और अधिक महत्वपूर्ण बात यह है कि मैं इन सभी छवियों को उनके वास्तविक आकारों से प्रदर्शित करना चाहता हूं।टेबल सेल ऊंचाई का आकार प्रति डाउनलोड की छवि ऊंचाई

कृपया मेरी मदद करें। अग्रिम :)

+0

सवालों की एक जोड़ी बदल जाएगा। क्या ये छवियां स्क्रीन की 320px चौड़ाई पूरी कर लेंगी? या चौड़ाई के बावजूद, वे सिर्फ दूसरे के नीचे प्रदर्शित होंगे? या यदि पिछली छवि की चौड़ाई 320 से कम है और अगला भी शेष चौड़ाई (320-prev_img_width) में फिट हो सकता है तो यह पिछली छवि के आगे या पिछला नीचे दिखाई देगा। –

उत्तर

2

बाहर चेक heightForRowAtIndexPath: धन्यवाद। इसके बारे में एक और post है।

1
कि के लिए

यू कस्टम UITableViewCell बनाने के लिए और यू इस कोड

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int rowHeight =0.0f; 

    // here u can get particular Url by indexPath.row, now create UIImage object using that Url 

    CGRect bioHeadingFrame = image.frame; 
    rowHeight = size.height; //get the height of that image 

    return rowHeight; 
} 

अब आपकी तालिका सेल की ऊंचाई छवि ऊंचाई

+1

आपकी कहानियां क्या सही है। लेकिन टेबल व्यू सेल में छवि को डाउनलोड और प्रदर्शित करने के लिए, मैं असिंक्रोनस व्यू क्लास का उपयोग कर रहा हूं। मैं इस वर्ग (एसिंक्रोनस व्यू क्लास) को डाउनलोड करने के लिए छवि यूआरएल पास कर रहा हूं। छवि डाउनलोड करने के बाद ही मुझे वास्तविक छवि आकार मिल जाएगा। तो मैं टेबलव्यू रीलोड कैसे कह सकता हूं और छवि आकार के संबंधित सेल को कैसे बना सकता हूं। – rahul

+1

बस खोज SO: http://stackoverflow.com/a/4448393/207616 –

+1

relikd सही है। reloadRowsAtIndexPaths कुंजी है। –

0

हैं के अनुसार वृद्धि हुई है का उपयोग कर तालिका दृश्य पर सेल के आकार सेट कर सकते अतुल्यकालिक डाउनलोड आपका असली मुद्दा है, AFNetworking लाइब्रेरी की UIImageView श्रेणी देखें। विशेष रूप से इस समारोह:

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage 

आप इसे अपने प्रोजेक्ट में UIImageView श्रेणी और उस वर्ग से ली गई कोशिका छवियों सेट शामिल कर सकते हैं।

3

प्रतिनिधि विधि आप डाउनलोड करते समय आप उपयोग कर सकते

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] 
       withRowAnimation:UITableViewRowAnimationAutomatic]; 

यह फिर

-(CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath 

फोन करेगा समाप्त छवि अपडेट करना पड़ता है पर तो तुम यह छवि की ऊंचाई का उपयोग कर यदि वह मौजूद होना चाहिए , एक डिफ़ॉल्ट वजन, या प्लेसहोल्डर छवि यदि आपके पास है।

3

सबसे पहले, मैं अत्यधिक अतुल्यकालिक डाउनलोड करने के लिए SDWebImage का उपयोग कर, अगर आप पहले से ही ऐसा करने से नहीं कर रहे हैं सलाह देते हैं। आप जो चाहते हैं उसके आधार पर, आप इसे स्मृति या डिस्क पर छवियों को कैश कर सकते हैं - बाद में उन्हें विशेष कैश फ़ोल्डर में सहेजकर, सही फैशन में किया जाता है, इसलिए यदि यह स्थान से बाहर हो जाता है तो आईओएस उन्हें हटा सकता है। यह UIImageView पर एक आसान श्रेणी भी प्रदान करता है, जो AFNetworking आपको देता है, लेकिन अधिक विकल्प और वैकल्पिक समापन ब्लॉक के साथ। इस तरह आप कुछ इस तरह कर सकते हैं:

#import <SDWebImage/UIImageView+WebCache.h> 

... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    // Create the cell... 

    [cell.myImageView setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"] 
       placeholderImage:[UIImage imageNamed:@"placeholder"] 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
     if (image != nil) { 
      [self.images insertObject:image atIndex:indexPath.row]; 
      [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES]; 
     } 
    }]; 
    return cell; 
} 

इस तरह आप एसिंक्रोनस रूप से छवि डाउनलोड, UIImageView सही ढंग से निर्धारित है, लेकिन आप भी एक NSMutableArray में छवि को बचाने के लिए ब्लॉक उपयोग करें ताकि आप tableview बता सकते हैं सही ऊंचाई यह उस तालिका की ऊंचाई को अपडेट करने के लिए तालिका दृश्य को भी बताता है जिसकी छवि लोड हो गई है। फिर जब तालिका दृश्य पता है कि कैसे उच्च जब किसी सेल है की जरूरत है, अगर छवि लोड किया गया है, हम आकार यह से मिलेगा:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    id image = [self.images objectAtIndex:indexPath.row]; 
    if ([image isKindOfClass:[NSNull class]]) { 
     return defaultHeight; 
    } else { 
     return [image size].height + topPadding + bottomPadding; 
    } 
} 

इस तरह हम कि बंद कर रहे हैं छवियों की भी ऊंचाई पता -स्क्रीन (उदाहरण के लिए जब आप नीचे स्क्रॉल किया है)। यह समाधान मानता है कि आप NSNull मानों के साथ NSMutableArray को पॉप्युलेट करके प्रारंभ करते हैं, जिन्हें तब लोड होने पर छवियों के साथ प्रतिस्थापित किया जाता है। अंत में, यदि आप चाहें, तो आप कोशिकाओं को दिखाए जाने से पहले मैन्युअल रूप से डाउनलोड शुरू करने के लिए SDWebImageManager का उपयोग कर सकते हैं।

+0

आपको यह +50 क्यों मिलता है ?? – Rajneesh071

+0

मैं सहमत हूं कि एसडीवेब इमेज एक महान पुस्तकालय है लेकिन यह इस सवाल का सही जवाब नहीं होना चाहिए, इसे निश्चित रूप से वोट प्राप्त करना चाहिए था, लेकिन बकाया अंक नहीं। –

3

आप छवि डाउनलोड करने के अनुसार UIImageView आकार बना सकते हैं लेकिन यह खराब दिखने वाला देगा।

तो मैं तुम्हें एक ही आकार के अपने सभी छवि बनाने के लिए सुझाव देते हैं, तो यह ठीक है और मिठाई

आप इस का उपयोग कर सकते एक ही आकार के अपने सभी छवि बनाने के लिए लग रही हो जाएगा।

+ (UIImage *)imageScaledToSizeWithImage:(UIImage *)imagewww andsizeee:(CGSize)size 
{ 
    //avoid redundant drawing 
    if (CGSizeEqualToSize(imagewww.size, size)) 
    { 
     return imagewww; 
    } 

    //create drawing context 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f); 

    //draw 
    [imagewww drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)]; 

    //capture resultant image 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    //return image 
    return image; 
} 

यदि आपको वास्तव में अलग पंक्ति आकार के साथ तालिका दिखाना चाहते हैं तो रन टाइम

पर अपनी पंक्ति आकार बदलने के लिए जब आप छवि मिल जाएगा तो कुंजी मान के साथ शब्दकोश में अपनी छवि बचाने के लिए करना पंक्ति के indexPath है ।

[tableImageDict setObject:image forKey:[NSString stringWithFormat:@"%i,%i",indexPath.row,indexPath.section]]; 

और फिर अपनी तालिका पंक्ति पुनः लोड करें।

[table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
        withRowAnimation:UITableViewRowAnimationNone]; 

यह फिर आदमी के लिए अपने पंक्ति की ऊँचाई

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIImage *image = (UIImage *)[tableImageDict objectForKey: 
           [NSString stringWithFormat:@"%i,%i", 
            indexPath.row,indexPath.section]]; 


    if (image != nil) 
    { 
     return image.size.height; 
    } 
    else{ 
     return 44.0; 
    } 
} 
संबंधित मुद्दे