2010-08-27 11 views
7

मेरे पास कुछ ऐप है जो मेरे ऐप में प्रदर्शित होने की आवश्यकता है। पाठ में ऐसे लिंक होते हैं जिन्हें इंटरैक्टिव होने की आवश्यकता होती है। मैंने UITextViews और UILabels में tappable लिंक बनाने के लिए कुछ समाधानों का प्रयास किया है।इसकी सामग्री के आधार पर एक UIWebView गतिशील रूप से आकार बदलना फ़ॉन्ट आकार

  1. UITextView लिंक

    • UITextView डेटा डिटेक्टरों कि यूआरएल पर लेने और उन्हें tappable बनाने प्रदान करता है।
    • मेरे लिए अनुपयोगी क्योंकि लिंक केवल सफारी में बाहर खुल जाएगा, नियंत्रण लेने का कोई तरीका नहीं है और मैं जो लिंक चाहता हूं उसे कर सकता हूं।
  2. UILabel "फैंसी लेबल" (http://furbo.org/2008/10/07/fancy-uilabels/)

    • लगभग सही समाधान है, लिंक के उपलब्ध कराने का पता लगाने और उपयोगकर्ता के लिए एक तरह से उपयोग करते हुए देख सकते हैं और उन्हें इनलाइन दोहन करने के लिए और मुझे पूरा नियंत्रण अपने हाथ में दे रही है लिंक जब इसे दबाया जाता है तो लिंक के साथ क्या करना है।
    • वर्तमान में अनुपयोगी क्योंकि कार्यान्वयन लिंक को ओवरले करने के लिए UIButton एस का उपयोग करता है और वे लंबे लिंक पर टेक्स्ट से लपेटते नहीं हैं।

अंत में मैं वेब दृश्य का उपयोग करने पर बस गए। मैं टेक्स्ट को वेबव्यू में पास करता हूं और इसके चारों ओर एक मूल HTML रैपर बनाता हूं और सब कुछ हंकी-डोरी है। यह वही दृष्टिकोण है जो आईफोन (उर्फ Tweetie) के लिए ट्विटर का उपयोग करता है।

मेरे पास अब एकमात्र समस्या यह है कि यदि टेक्स्ट बहुत लंबा है, तो वेबव्यू ओवरफ्लो क्लिप करता है और क्लिप को देखने के लिए स्क्रॉल करता है। दूसरा, यदि टेक्स्ट बहुत छोटा है, तो वेबव्यू के नीचे बर्बाद जगह का एक बड़ा क्षेत्र है।

ट्वीटी के विपरीत, मेरे पास वेबव्यू के नीचे अधिक सामग्री है, और मैं स्क्रॉलिंग ओवरफ़्लो या बर्बाद स्थान से बचना चाहता हूं। वेबव्यू एक स्क्रॉल व्यू का सबव्यूव है, फिर भी पूरे पृष्ठ की सामग्री स्क्रॉल करने की आवश्यकता वाले अपने सबव्यूव के बिना बढ़ सकती है।

क्या कोई तरीका है कि मैं गतिशील रूप से वेबव्यू का आकार बदल सकता हूं ताकि यह इसकी सामग्री के आधार पर सही ऊंचाई हो?

मैं अब तक बहुत सी बातें की कोशिश की है, कुछ भी नहीं एक ठोस समाधान लगता है:

  • sizeToFit कुछ भी नहीं है (या अधिक होने की संभावना है, बस क्या वर्तमान फ्रेम वैसे भी है के लिए आकार सेट) करता है।
  • sizeThatFits: वैसे भी अपना वर्तमान आकार देता है।
  • NSString का sizeWithFont:constrainedToSize: व्यवहार्य नहीं है क्योंकि UIWebView और UIFont के आकार 18 के विभिन्न प्रतिनिधित्व हैं।
    • बस इस बिंदु पर विस्तृत करने के लिए। मेरे परीक्षण में, मैंने पाया है कि स्केल फैक्टर 1.0 और scalesPageToFitNO पर सेट किया गया है और पूरे पृष्ठ के लिए फ़ॉन्ट आकार 13.5pt (सीएसएस में) के लिए एक फ़ॉन्ट आकार UILabel के समान आकार UIFont के साथ समान आकार देता है आकार 18 का। यदि कोई मुझे समझा सकता है तो मैं आभारी रहूंगा।
  • साथ ही, वेब व्यू में मैं वेब दृश्य को लंबे शब्दों या यूआरएल के साथ क्षैतिज स्क्रॉल करने से रोकने के लिए सीएसएस प्रॉपर्टी word-wrap: break-word; का उपयोग कर रहा हूं। इस वजह से, वेब व्यू और UILineBreakModeWordWrap के बीच रैपिंग व्यवहार पूरी तरह से अलग है। यहां तक ​​कि UILineBreakModeCharacterWrap का उपयोग करने से भी वही परिणाम नहीं मिलते हैं।

या तो ऐसा करने का कोई तरीका नहीं है, या मैं गूंगा हूं और कुछ आसान याद कर रहा हूं। अगर कोई अंतर्दृष्टि प्रदान कर सकता है, तो मैं बहुत आभारी रहूंगा। धन्यवाद।

उत्तर

1

मैं http://www.iphonedevsdk.com/forum/iphone-sdk-development/1388-getting-actual-content-size-uiwebview.html

मैं आश्वस्त नहीं हूँ कि यह सबसे अच्छा समाधान है पर मेरी समस्या का समाधान मिल गया है, लेकिन यह काम कर रहा है। अगर किसी के पास कोई बेहतर विचार है तो मुझे उन्हें सुनकर खुशी होगी।

मैंने webViewDidFinishLoad: में अपने वेब व्यू पर उस जावास्क्रिप्ट को समाप्त कर दिया। , आदि

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *string = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"body\").offsetHeight;"]; 
    CGFloat height = [string floatValue] + 8; 
    CGRect frame = [_webView frame]; 
    frame.size.height = height; 
    [_webView setFrame:frame]; 

    if ([[self delegate] respondsToSelector:@selector(webViewController:webViewDidResize:)]) 
    { 
     [[self delegate] webViewController:self webViewDidResize:frame.size]; 
    } 
} 

मैं पैड पड़ा ऊंचाई से थोड़ा के रूप में मूल मूल्य को ध्यान में मार्जिन आकार नहीं लिया

: तो मेरे कोड की तरह दिखता है मैं एक एकल div तत्व अपनी सामग्री को कहा जाता है शरीर लपेटकर है

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

3

असल में, आप -sizeThatFits: का उपयोग एक छोटी सी चाल के साथ कर सकते हैं। एक ही प्रश्न के लिए my response देखें।

+0

अच्छा लगता है, जब मैं इसे करने की अगली आवश्यकता होगी तो मैं इसे आज़मा दूंगा। – Jasarien