una texto tamaño tamano página puede para navegador letras letra las desde cómo como celular cambiar aumentar app agrandar ios cocoa-touch fonts uilabel

ios - tamano - cómo se puede cambiar el tamaño del texto de una página web desde el navegador



Escalar el tamaño de letra para que quepa verticalmente en UILabel (2)

Quiero tomar una UILabel estándar y aumentar el tamaño de la fuente para que llene el espacio vertical. Tomando la inspiración de la respuesta aceptada para esta pregunta , definí una subclase en UILabel con esta implementación drawRect:

- (void)drawRect:(CGRect)rect { // Size required to render string CGSize size = [self.text sizeWithFont:self.font]; // For current font point size, calculate points per pixel float pointsPerPixel = size.height / self.font.pointSize; // Scale up point size for the height of the label float desiredPointSize = rect.size.height * pointsPerPixel; // Create and assign new UIFont with desired point Size UIFont *newFont = [UIFont fontWithName:self.font.fontName size:desiredPointSize]; self.font = newFont; // Call super [super drawRect:rect]; }

Pero esto no funciona, ya que escala la fuente más allá de la parte inferior de la etiqueta. Si quiere replicar esto, comencé con una etiqueta de 289x122 (ancho x altura), Helvetica como fuente y un punto de inicio de tamaño 60 que se adapta cómodamente a la etiqueta. Aquí hay un ejemplo de salida del estándar UILabel y mi subclase usando la cadena "{Hg":

He visto descenders y ascendentes de fuentes, intenté escalar teniendo esto en cuenta en diferentes combinaciones, pero aún no he tenido suerte. Alguna idea, ¿tiene esto algo que ver con las diferentes fuentes que tienen distintas longitudes de descensor y ascendente?


Me pregunto si se trata de un error de redondeo al siguiente tamaño de letra más grande. ¿Podrías escalar ligeramente el rec.size.height? Algo como:

float desiredPointSize = rect.size.height *.90 * pointsPerPixel;

Actualización: su cálculo de puntoPerPixel está al revés. En realidad, divide los píxeles por puntos de fuente, en lugar de dividirlos por píxeles. Cambie esos y funciona todo el tiempo. Solo por minuciosidad, aquí está el código de muestra que probé:

//text to render NSString *soString = [NSString stringWithFormat:@"{Hg"]; UIFont *soFont = [UIFont fontWithName:@"Helvetica" size:12]; //box to render in CGRect rect = soLabel.frame; //calculate number of pixels used vertically for a given point size. //We assume that pixel-to-point ratio remains constant. CGSize size = [soString sizeWithFont:soFont]; float pointsPerPixel; pointsPerPixel = soFont.pointSize / size.height; //this calc works //pointsPerPixel = size.height / soFont.pointSize; //this calc does not work //now calc which fontsize fits in the label float desiredPointSize = rect.size.height * pointsPerPixel; UIFont *newFont = [UIFont fontWithName:@"Helvetica" size:desiredPointSize]; //and update the display [soLabel setFont:newFont]; soLabel.text = soString;

Esa escala y ajuste dentro de la caja de etiquetas para cada tamaño que probé, que van desde fuentes de 40pt a 60pt. Cuando invertí el cálculo, vi los mismos resultados con la fuente demasiado alta para la caja.


Su cálculo para pointsPerPixel está en el modo incorrecto, debería ser ...

float pointsPerPixel = self.font.pointSize / size.height;

Además, tal vez este código debe estar en layoutSubviews ya que la única vez que se debe cambiar la fuente es cuando cambia el tamaño del marco.