2016-07-05 279 views
8

這是一個說「About」的UILabel。 iOS中精確設置爲17.7。UIWebView中的字體大小與iOS字體大小不匹配

在它下面還有一個UIWebView,它也會顯示「About」。也使用css精確設置爲17.7。

enter image description here

他們不匹配。

如何正確解決此問題?

這是奇怪的是,在蘋果自己的UIWebView中,尺寸依據不同

HTML來測試...

<html><head> 
<style type='text/css'> 
body { 
margin: 0px; 
font-family: 'SourceSansPro-Light'; 
font-size: FONTPOINTSpt; 
} 
html { -webkit-text-size-adjust:none; } 
</style></head> 
<body leftmargin=0 topmargin=0> 
About 
</body></html> 

行爲是對設備或仿真器相同。

(注,從here我學到的比,也許是72.0/96.0)。

+0

檢查父容器的字體大小爲兩個About控件。我敢打賭其中一個已經有了一個字體大小的設置。如果這是你設置關於它的字體大小的情況,則需要考慮父字體大小。如果我能看到你的HTML和CSS,可能會更清楚。 – Lowkase

回答

10

如果你想要的字體大小的UILabel用途和字體大小的UIWebView使用(通過CSS)你有你的CSS定義字體大小時使用的px代替pt之間的1對1的關係。

結帳這個例子HTML/CSS:

<html> 
    <head> 
     <style type='text/css'> 
      body { 
       font-family: 'SourceSansPro-Regular'; 
       padding: 0 
      } 
      .point { 
       font-size: 17pt 
      } 
      .pixel { 
       font-size: 17px 
      } 
     </style> 
    </head> 
    <body> 
     <p class="point">About (17pt)<p> 
     <p class="pixel">About (17px)</p> 
    </body> 
</html> 

當您添加UIWebViewUILabelUIViewController並加載上面的HTML到UIWebView和相同的字體設置爲UILabel

override func viewDidLoad() { 
    super.viewDidLoad() 

    let webView = UIWebView(frame: CGRect(x: 25, y: 50, width:325 , height: 90)) 
    view.addSubview(webView) 

    let filePath = NSBundle.mainBundle().URLForResource("test", withExtension: "html") 
    webView.loadRequest(NSURLRequest(URL: filePath!)) 

    let label = UILabel(frame: CGRect(x: 25, y: 150, width: 325, height: 40)) 
    label.font = UIFont(name: "SourceSansPro-Regular", size: 17) 
    label.text = "About (UILabel set to 17)" 
    view.addSubview(label) 
} 

您會得到以下輸出:

enter image description here

+0

好主!非常簡單! – Fattie

+0

純粹的輝煌 – Fattie

+0

非常感謝你@joerm,通過賞金髮送 – Fattie

-2

是的,它的父字體大小問題:

你應該總是設置字體大小的身體16px(如果需要更大的基本字體,可以將其設置得更高,標準爲16px)。

然後,使用16px作爲基礎設置字體大小。

body { 
    font-size: 16px; 
} 

h1 { 
    font-size: 24px; 
} 

如果你想在身體和H1字體大小既要一樣,那麼簡單地定身font-size和不設置H1的字體大小(它會繼承正文字體 - 全部自行設計......又名...級聯)。

body { 
    font-size: 16px; 
} 

h1 { 

} 

您所做的一切被定身字體大小的值...然後設置H1字體大小相同的值,問題是H1繼承了身體,然後將字體大小當您將字體大小分配給h1時,它會變得更大。

希望這是有道理的,並幫助。

+0

是的,試試吧,讓我知道如果這是解決方案;) – Lowkase

+0

你使用normalize.css一些地方?聽起來像H1有一個默認設置爲40px的標準化或類似設置。也許你可以在源碼設置H1字體大小 – Lowkase

0

我覺得你的困惑是因爲CSS pt是一個印刷點(1/72英寸),但Apple的iOS文檔使用「點」(例如, UIFont。pointSize)作爲「虛擬像素」,它對應於CSS px。從@ joern的回答來看,它看起來像UIWebView使用1 css px = 1 ios虛擬px。 (我沒有測試過這個)。但是,在我使用WKWebView的測試中,它看起來像CSS px等於一個設備像素。因此對於WKWebView,您需要:

let fontSize = UIScreen.main.scale * label.font.pointSize 
let cssStr = String(format:"font-size: %.1fpx;", fontSize)