261 votos

UILabel de texto margen

Yo estoy mirando para establecer la izquierda inset/margen de un UILabel y no puede encontrar un método para hacerlo. La etiqueta tiene un fondo tan solo cambiando su origen no hará el truco. Sería ideal para colocar el texto 10px o así en el lado izquierdo.

406voto

Tommy Herbert Puntos 4314

Lo resuelto por la creación de subclases UILabel y primordial drawTextInRect: como esta:

- (void)drawTextInRect:(CGRect)rect {
    UIEdgeInsets insets = {0, 5, 0, 5};
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

Como es posible que ha reunido, esta es una adaptación de la ct.'s respuesta. Tiene dos ventajas más que uno:

  1. no hay necesidad de activarlo mediante el envío de un sizeToFit mensaje
  2. deja la etiqueta de fotograma solo - es muy útil si su etiqueta tiene un fondo y no quieres que reducir

129voto

blyabtroi Puntos 348

Para varias líneas de texto de la izquierda y la margen derecha se pueden establecer mediante NSAttributedString.

NSMutableParagraphStyle *style =  [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
style.alignment = NSTextAlignmentJustified;
style.firstLineHeadIndent = 10.0f;
style.headIndent = 10.0f;
style.tailIndent = 10.0f;    

NSAttributedString *attrText = [[NSAttributedString alloc] initWithString:title attributes:@{ NSParagraphStyleAttributeName : style}];  

UILabel * label = [[UILabel alloc] initWithFrame:someFrame];
label.numberOfLines = 0;
label.attributedText = attrText;

74voto

Brody Robertson Puntos 3197

El mejor enfoque para agregar relleno a un UILabel es subclase UILabel y agregar un edgeInsets de la propiedad. Después de establecer la deseada márgenes y la etiqueta se dibujará en consecuencia.

OSLabel.h

#import <UIKit/UIKit.h>

@interface OSLabel : UILabel

@property (nonatomic, assign) UIEdgeInsets edgeInsets;

@end

OSLabel.m

#import "OSLabel.h"

@implementation OSLabel

- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
    }
    return self;
}

- (void)drawTextInRect:(CGRect)rect {
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
}

- (CGSize)intrinsicContentSize
{
    CGSize size = [super intrinsicContentSize];
    size.width  += self.edgeInsets.left + self.edgeInsets.right;
    size.height += self.edgeInsets.top + self.edgeInsets.bottom;
    return size;
}

@end

63voto

Peter DeWeese Puntos 10185

Subclases es un poco engorroso para un caso sencillo. Una alternativa es simplemente agregar el UILabel sin fondo establecido para un UIView con el fondo establecido. Establece la etiqueta del x 10 y hacer la vista exterior del tamaño de 10 píxeles más amplio que el de la etiqueta.

43voto

yar1vn Puntos 1472

Acabé añadiendo algunos espacios para el texto:

self.titleLabel.text = [NSString stringWithFormat:@"    %@", self.titleLabel.text];

Feo pero efectivo, y no la creación de subclases necesario.

Edición: Esta solución fue escrito en iOS 5 y funciona bien para algunos usuarios. De acuerdo con los comentarios de que no funciona bien para iOS 7. No hay necesidad de votación.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X