これが「About」と書かれたUILabelです。 iOSでは正確に17.7に設定します。
その下には、「About」とも書かれたUIWebViewがあります。また、cssを使用して正確に17.7に設定します。
それらは一致しません。
これを正しく修正する方法は?
Apple自身の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>
動作はデバイスまたはシミュレータで同じです。
(注 ここ から、比率はおそらく72.0/96.0であることがわかりました。)
UILabel
が使用するフォントサイズとUIWebView
が(CSS経由で)使用するフォントサイズの間に1対1の関係が必要な場合は、代わりにpx
を使用する必要があります。 CSSでフォントサイズを定義する場合はpt
。
この例の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>
UIWebView
とUILabel
をUIViewController
に追加し、上記の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)
}
次の出力が得られます。
CSS ptが活版印刷のポイント(1/72インチ)であるために混乱したと思いますが、AppleのiOSドキュメントでは、CSSpxに対応する「仮想ピクセル」として「ポイント」(UIFont.pointSizeなど)を使用しています。 @joernの回答から判断すると、UIWebViewは1 css px = 1 ios virtualpxを使用しているように見えます。 (これはテストしていません。)ただし、WKWebViewを使用したテストでは、CSSpxは1つのデバイスピクセルに等しいように見えます。したがって、WKWebViewの場合、次のことが必要です。
let fontSize = UIScreen.main.scale * label.font.pointSize
let cssStr = String(format:"font-size: %.1fpx;", fontSize)