UIWebView中的字体大小与iOS字体大小不匹配

UIWebView中的字体大小与iOS字体大小不匹配

问题描述:

这是一个说“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

如果你想要的字体大小的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

是的,它的父字体大小问题:

你应该总是设置字体大小的身体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

我觉得你的困惑是因为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)