2011-11-29 16 views
10

मैं UIWebView में मनमानी लंबाई की एक HTML स्ट्रिंग लोड कर रहा हूं जिसे तब UITableViewCell में प्रदर्शित किया जाता है। मैं UIWebView को UITableView से स्वतंत्र रूप से स्क्रॉल करने के लिए नहीं चाहता हूं इसलिए मुझे सामग्री को फिट करने के लिए अपनी ऊंचाई का आकार बदलना होगा।सामग्री फिट करने के लिए UIWebView ऊंचाई का आकार

यह UITableViewCell भी ढहने योग्य है, UIWebView दिखा रहा है जब यह इसके ध्वस्त राज्य में है।

रगड़ है, मुझे कैसे पता चलेगा कि यह ऊंचाई क्या है ताकि मैं heightForRowAtIndexPath एक उचित मूल्य वापस कर सकूं और तालिका को सही ढंग से देखने और स्क्रॉल करने की अनुमति दे?

यहाँ कुछ उदाहरण कोड है:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
if (indexPath.row == 0) 
    return 286; 

if (indexPath.row == 1) { 
    if (analysisExpanded) 
     return analysisWebViewHeight + 39; 
    else 
     return 52; 
} 

if (sourcesExpanded) 
    return sourcesWebViewHeight + 39; 

return 53; 

}

सुंदर सरल। 39 वेबपेज के साथ सेल में मेरे कुछ हेडर सामान की ऊंचाई है।

मैं एक निब से सेल के "विस्तृत दृश्य" लोड हो रहा है कर रहा हूँ, इसलिए मैं वेबव्यू viewForTag फोन कर रहा हूँ प्राप्त करने के लिए:

 UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1]; 
     [sourcesWebView setBackgroundColor:[UIColor clearColor]]; 
     [sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]]; 
     sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue]; 
     [sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)]; 

sourcesWebViewHeight एक इवर कि cellForRowAtIndexPath में उपरोक्त कोड के द्वारा अद्यतन किया जाता है । यदि उपयोगकर्ता सेल को तीन बार टैप करता है, तो विस्तार-पतन-विस्तार करें, और थोड़ा स्क्रॉलिंग करता है, अंत में यह सही ऊंचाई प्राप्त करता है।

मैंने मेमोरी-केवल UIWebView ऑब्जेक्ट का उपयोग कर ऊंचाई को "प्रीलोडिंग" करने का प्रयास किया, लेकिन किसी कारण से कभी भी सही संख्याएं वापस नहीं आईं।

NSInteger height = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] integerValue]; 

document.documentElement.scrollHeight इस ब्राउज़र के लिए काम नहीं कर रहा:

+0

ऐप्पल (UIWebView दस्तावेज़ में) ने सख्ती से UITableView में UIWebView का उपयोग न करने के लिए कहा। – makboney

+0

हमने बिना किसी समस्या के सेल के रूप में वेब-विज़ुअल के साथ कई ऐप्स प्रकाशित किए हैं – Denis

+0

एक ही प्रश्न के अधिक और बेहतर उत्तर [यहां] [1] भी मिल सकते हैं। [1]: http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview –

उत्तर

2

आईओएस सफारी के लिए आप निम्न पंक्ति का उपयोग करने की जरूरत है। वे करने के लिए scrollView संपत्ति जोड़ दिया है एक और विकल्प, कि iOS5 के लिए ही काम करेंगे,:

बस सुनिश्चित करें कि सब कुछ ठीक है हो सकता है, यदि आप अपने वेब-व्यू के बाद यह कॉल करने की आवश्यकता लोड हो जाए, =)

अद्यतन UIWebView, जहां आप contentSize प्राप्त कर सकते हैं।

5

मुद्दा यह था कि वेब दृश्य को प्रस्तुत करने का मौका मिलने से पहले मैं स्क्रॉल आकार प्राप्त करने का प्रयास कर रहा था।

didFinishLoad प्रतिनिधि विधि को लागू करने के बाद, मेरी मूल जावास्क्रिप्ट ऊंचाई प्राप्त करने के लिए ठीक काम किया।

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    float height; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UIWebView *webContent = (UIWebView *) [cell viewWithTag:tagTableSingleContentWeb]; 
    CGRect frame = webContent.frame; 

    height = frame.origin.y + frame.size.height + 30; 

    return height; 
} 

से ऊपर है:

+1

आप जवाब के रूप में स्वीकार करना चाहिए, के लिए काम किया मुझे – Fonix

1

जब एचटीएमएल कोड भरी हुई है के बाद से webViewDelegate WebView की ऊंचाई प्राप्त कर सकते हैं, tableview:heightForRowAtIndexPath: विधि अनंत लूप के लिए WebView tableView सेल में स्थित प्राप्त करने का प्रयास में प्रवेश करेंगे जिस कोड को मैंने तालिका को बदलने की कोशिश की थी, जब मैं वेब दृश्य में HTML कोड डालता हूं, तो सेल देखें, लेकिन यह अनंत लूप का कारण बन जाएगा ....

मैं अभी भी कुछ और तरीके खोजने का प्रयास कर रहा हूं।

पेज।WebViewDelegate तरीका ठीक है जब वेबव्यू स्क्रॉलव्यू में स्थित है, लेकिन मैं अभी तक टेबलव्यू सेल के अंदर काम करने के तरीके के बारे में नहीं हूं।

+0

क्या आपको समाधान मिला है? मुझे भी यही समस्या हो रही है? –

0

बहुत अधिक प्रश्नों के अधिक से अधिक बेहतर उत्तर here भी मिल सकते हैं। बस सोचा कि यह किसी के लिए सहायक हो सकता है।

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

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