2012-09-21 15 views
19

डिफ़ॉल्ट रूप से UIWebView का उपयोग किस फ़ॉन्ट का उपयोग करता है? मैं इसे बदलने में सक्षम होना चाहता हूं। लेकिन मैं एचटीएमएल स्ट्रिंग में यह करने के लिए नहीं करना चाहते हैं, तो इसके बजाय मैं की तरह कुछ करना चाहते हैं:UIWebView डिफ़ॉल्ट फ़ॉन्ट को कैसे बदलें

[webView setFont:[UIFont fontWithName:@"GothamRounded-Bold" size:14] 

वहाँ ऐसी संपत्ति या कोई अन्य तरीका है?

उत्तर

23

बस WebView में लोड करने से पहले अपने स्ट्रिंग के लिए एक <font face> टैग लगा दें।

NSString *body = [plist objectForKey:@"foo"]; 
NSString *htmlString = 
    [NSString stringWithFormat:@"<font face='GothamRounded-Bold' size='3'>%@", body]; 
[webView loadHTMLString:htmlString baseURL:nil]; 
+3

* sidenote: * यह काम करता है, लेकिन फ़ॉन्ट टैग को पहले से ही पहले ही हटा दिया गया है, जैसा कि अन्य उत्तरों द्वारा सुझाया गया है। संक्षेप में, '' टैग – Raptor

+1

का उपयोग न करें, यह सामान्य रूप से केवल एक भयानक समाधान है, क्योंकि आप HTML को तोड़ने की गारंटी देते हैं। आप और टैग को बाहरी टैग में लपेटने जा रहे हैं, जो कि केवल भयानक है। भले ही यह * काम * करने के लिए होता है क्योंकि ब्राउज़र पर्याप्त सहनशील होते हैं, जो इस तरह के डिज़ाइन से माफ नहीं करते हैं, इमो। – devios1

3

UIWebview HTML में सेट किए गए फ़ॉन्ट का उपयोग करता है। 'डिफ़ॉल्ट फ़ॉन्ट' नहीं है। यहां तक ​​कि यदि कोई फ़ॉन्ट विशेष रूप से उल्लिखित नहीं है, तो आपके पास इसे सेट करने की पहुंच नहीं है। यह सब वेबकिट के अंदर है, जिसकी हमारे पास पहुंच नहीं है।

+0

हम्म, बहुत बुरा। यह एक सेटफॉन्ट संपत्ति होने के लिए आसान होगा जैसे कि यह UITextView में है। –

+5

एक डिफ़ॉल्ट फ़ॉन्ट है। सभी वेब ब्राउज़र में एक डिफ़ॉल्ट फ़ॉन्ट होता है जिसका उपयोग तब किया जाता है जब कोई फ़ॉन्ट अन्यथा निर्दिष्ट नहीं होता है। चाहे वह अनुकूलन योग्य है या नहीं, सवाल है, और ऐसा लगता है कि जवाब नहीं है। – devios1

20

आप इस तरह जावास्क्रिप्ट की एक पंक्ति इंजेक्शन लगाने के द्वारा फ़ॉन्ट स्थापित करने के लिए कोशिश कर सकते:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"]; 
+0

फ़ॉन्ट आकार के लिए: [webView stringByEvaluatingJavaScriptFromString: @ "document.getElementsByTagName ('body') [0] .style.fontSize = '15px'"]; –

+0

सुनिश्चित करें कि आप उपरोक्त स्क्रिप्ट _after_ को वेब सामग्री लोड करना चाहते हैं, उदा।प्रतिनिधि की वेब व्यूडिडफिनिश लोड विधि से। – pipacs

38

आप अपने UIFont वस्तु का उपयोग कर सकते हैं (ताकि आप इसे सेट और अधिक आसानी से संशोधित कर सकते हैं), लेकिन एक span बजाय में HTML लपेट; font टैग have been deprecated एचटीएमएल 4.01 के बाद से।

UIFont *font = [UIFont fontWithName:@"GothamRounded-Bold" size:14]; 

मान लिया जाये कि आप पहले से ही NSString *htmlString बनाया है, आप फ़ॉन्ट के गुणों का उपयोग कर सकते हैं:

htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>", 
             font.fontName, 
             (int) font.pointSize, 
             htmlString]; 

वैकल्पिक रूप से, आप बस के बजाय एक UIFont वस्तु का उपयोग कर के मूल्यों आपूर्ति कर सकता:

htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>", 
             @"GothamRounded-Bold", 
             14, 
             htmlString]; 
+1

ग्रेट विधि, ध्यान देने योग्य एक महत्वपूर्ण बात: यह जावास्क्रिप्ट विधि के विपरीत सामग्री प्रदर्शित करने से पहले प्रस्तुत किया जाता है। –

+0

इस दृष्टिकोण का एक नुकसान है, 'यूफॉन्ट' की घोषणा कुछ रैम का उपयोग करती है, जिसे केवल स्ट्रिंग और पूर्णांक में फ़ॉन्ट नाम और आकार प्रदान करके टाला जा सकता है। – Raptor

+0

यह तिजुआनाकेज़ के उत्तर पर बताए गए एक ही मुद्दे से पीड़ित है। संक्षेप में यह हैकिश है और आपके द्वारा प्रदर्शित किए जा रहे पृष्ठों के HTML को तोड़ देता है। – devios1

6

यहां मेरे फ़ॉन्ट का उपयोग करने के लिए आसान और उपयोग में आसान समाधान है:

myHTMLLabel = [[UIWebView alloc] initWithFrame:CGRectMake(myX, myY, myWidth, myHeight)]; 

myHTMLLabel.userInteractionEnabled=NO; 
myHTMLLabel.scalesPageToFit=NO; 

[myHTMLLabel setOpaque:NO]; 
myHTMLLabel.backgroundColor = myBackColor; 

NSString *myHTMLText = [NSString stringWithFormat:@"<html>" 
         "<head><style type='text/css'>" 
         ".main_text {" 
         " display: block;" 
         " font-family:[fontName];" 
         " text-decoration:none;" 
         " font-size:[fontSize]px;" 
         " color:[fontColor];" 
         " line-height: [fontSize]px;" 
         " font-weight:normal;" 
         " text-align:[textAlign];" 
         "}" 
         "</style></head>" 
         "<body> <SPAN class='main_text'>[text]</SPAN></body></html>"]; 

myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[text]" withString: myText]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontName]" withString: myFontName]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontSize]" withString: myFontSize]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontColor]" withString: myFontColorHex]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[textAlign]" withString: myFontAlign]; 


NSLog(@"*** renderHTMLText --> myHTMLText: %@",myHTMLText); 

[myHTMLLabel loadHTMLString:myHTMLText baseURL:nil]; 
1

स्विफ्ट के लिए, मैं webViewDidFinishLoad

webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.fontFamily =\"HelveticaNeue\""); 
7

में यह एक वहाँ तेजी से 3 समाधान है का उपयोग करें:

func webViewDidFinishLoad(_ webView: UIWebView) { 
    webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.fontFamily =\"-apple-system\"") 
} 

मैं सिर्फ इस उदाहरण

+0

धन्यवाद, यह मदद की है। सीएसएस के साथ फ़ॉन्ट-परिवार काम नहीं कर रहा है। – waki

+0

फ़ॉन्ट आकार के बारे में क्या? उसे कैसे रखा जाए? – Tejas

1

के लिए डिफ़ॉल्ट आईओएस फ़ॉन्ट डाल अगर कोई स्विफ्ट 3 में समाधान ढूंढ रहा है, तो मैंने इसका इस्तेमाल किया (जेटर्री के जवाब के आधार पर):

let font = UIFont.init(name: "Name-of-your-font", size: theSize) 
self.newsWebView.loadHTMLString("<span style=\"font-family: \(font!.fontName); font-size: \(font!.pointSize); color: #21367B\">\(yourString)</span>", baseURL: nil) 

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