2016-07-05 37 views
8

Ecco un UILabel che dice "Informazioni". Impostato esattamente a 17,7 in iOS.Le dimensioni dei caratteri in UIWebView NON corrispondono alla dimensione del font iOS

Sotto c'è un UIWebView che dice anche "Informazioni". Impostato anche esattamente al 17,7 usando css.

enter image description here

Essi non corrispondono.

Come risolvere questo problema correttamente?

È il bizzarro che nel proprio UIWebView di Apple, la base delle dimensioni è diversa?

HTML per testare ...

<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> 

comportamento è identico dispositivo o simulatore.

(Nota, da here ho imparato il rapporto è, forse 72.0/96.0.)

+0

Controllare la dimensione del carattere dei contenitori padre sui due controlli Informazioni. Scommetto che uno di questi ha già impostato un font-size. Se questo è il caso quando si imposta la dimensione del carattere per la Informazioni su di esso prende in considerazione la dimensione del carattere dei genitori. Se riesco a vedere il tuo codice HTML e CSS, potrebbe essere più chiaro. – Lowkase

risposta

10

Se si desidera un 1 a 1 rapporto tra la dimensione del carattere che i UILabel usi e la dimensione del carattere che i UIWebView usi (tramite CSS) è necessario utilizzare px invece di pt al momento di definire la dimensione del carattere nel CSS.

Acquista questo esempio 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> 

quando si aggiunge un UIWebView e un UILabel al UIViewController e caricare il sopra HTML al UIWebView e impostare lo stesso tipo di carattere per il 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) 
} 

Si ottiene il seguente risultato:

enter image description here

+0

Good Lord! E 'stato così semplice !! – Fattie

+0

splendore puro – Fattie

+0

Grazie mille @joerm, inviato per una taglia – Fattie

-2

Sì, è un problema di genitore font-size:

Si dovrebbe sempre impostare il font-size per il corpo a 16px (uno può impostarlo più alto se è richiesto un font di base più grande, lo standard è 16px).

Quindi, impostare le dimensioni dei caratteri utilizzando 16px come base.

body { 
    font-size: 16px; 
} 

h1 { 
    font-size: 24px; 
} 

Se si desidera che sia il corpo e le h1 dei font-dimensioni per essere lo stesso, allora è sufficiente impostare il corpo font-size e non impostare il font-size del h1 (che erediterà il carattere corpo -size tutto da solo ... aka ... a cascata).

body { 
    font-size: 16px; 
} 

h1 { 

} 

Quello che hai fatto è impostato il corpo font-size per un valore ... quindi impostare la H1 font-size a quello stesso valore, il problema è che h1 eredita il font-size dal corpo e poi diventa ancora più grande quando assegni una dimensione font a h1.

Spero che questo abbia senso e aiuti.

+0

sì, provalo e fammi sapere se questa era la soluzione;) – Lowkase

+0

Stai utilizzando un normalize.css in qualche posto? Sembra che H1 abbia un'impostazione predefinita di 40px impostata su una normalizzazione o qualcosa di simile. Forse puoi impostare la dimensione del font h1 alla fonte – Lowkase

0

Penso che la tua confusione sia dovuta al fatto che il punto di partenza è un punto tipografico (1/72 in), ma la documentazione Apple di Apple utilizza "point" (ad es. UIFont.pointSize) come "pixel virtuale", che corrisponde a CSS px. A giudicare dalla risposta di @ joern, sembra che UIWebView usi 1 css px = 1 ios px virtuale. (Non ho provato questo.) Tuttavia, nei miei test con WKWebView, sembra che CSS px sia uguale a un pixel del dispositivo. Quindi, per WKWebView, si desidera:

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