web-dev-qa-db-ja.com

UIWebViewのフォントサイズがiOSのフォントサイズと一致しません

これが「About」と書かれたUILabelです。 iOSでは正確に17.7に設定します。

その下には、「About」とも書かれたUIWebViewがあります。また、cssを使用して正確に17.7に設定します。

enter image description here

それらは一致しません。

これを正しく修正する方法は?

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であることがわかりました。)

13
Fattie

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>

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

14
joern

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)
0
prewett