descargar apple iphone uiview uibutton uilabel padding

apple - Cómo lograr UIButton/UILabel ''relleno'' en la aplicación iPhone



ios 12 descargar (10)

Tengo varias vistas en mi aplicación de iPhone que requieren relleno, por ejemplo, un UIButton personalizado con texto alineado a la izquierda y un UILabel con un color de fondo.

Esta puede ser una pregunta realmente estúpida, pero ¿cómo puedo aplicar ''relleno'' para mover el texto del borde izquierdo?

Me cansé de usar límites, etc. sin ningún éxito.

Sé que podría crear una vista de contenedor para mi UILabel con un color de fondo, pero parece exagerado.

Muchas gracias.


Aquí hay una subclase de UILabel que tiene un relleno personalizable usando una propiedad edgeInset:

PaddedLabel.h

#import <UIKit/UIKit.h> @interface PaddedLabel : UILabel @property UIEdgeInsets edgeInsets; @end

PaddedLabel.m

#import "PaddedLabel.h" @implementation PaddedLabel -(void)drawTextInRect:(CGRect)rect { return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)]; } -(CGSize)intrinsicContentSize { CGSize contentSize = [super intrinsicContentSize]; UIEdgeInsets insets = self.edgeInsets; contentSize.height += insets.top + insets.bottom; contentSize.width += insets.left + insets.right; return contentSize; } @end

(Esta es una simplificación de la respuesta de Brody, que también funciona con el ajuste automático).


En Xcode 9 , las inserciones ahora se encuentran en el inspector de tamaño en lugar del inspector de atributos:


Estoy tratando de lograr algo similar, que es ''pad'' a UILabel . He intentado implementar la solución que Toby publicó anteriormente, pero parece que no puede encontrar dónde debe ir. El UILabel con el que estoy trabajando está alineado a la izquierda, ¿es eso lo que está causando el problema?

Intenté usar esto en viewDidLoad , e incluso en una subclase de UILabel en el método:

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines


Estoy usando el diseño automático . La solución que funcionó para mí fue establecer UIButton ''s contentEdgeInsets .

ObjC

button.contentEdgeInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 30.0f);

Rápido

button.contentEdgeInsets = UIEdgeInsets(top: 0.0, left: 30.0, bottom: 0.0, right: 30.0)


Ok, la solución más simple que he encontrado hasta ahora es:

self.textAlignment = UITextAlignmentCenter; [self sizeToFit]; CGRect frame = self.frame; frame.size.width += 20; //l + r padding self.frame = frame;

No es exactamente lo que quería, pero funciona.


Para agregar relleno a UILabel, el enfoque más flexible es subclase UILabel y agregar una propiedad edgeInsets. A continuación, establece las inserciones deseadas 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; } -(id)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if(self){ self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0); } return self; } - (void)drawTextInRect:(CGRect)rect { return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)]; } @end


Para establecer el relleno en el texto del urturto, debe usar la propiedad de contentEdgeInsets . En Storyboard, para configurar el contenido, siga los siguientes pasos:

  1. Seleccione Ver controlador, seleccione uibutton
  2. Vaya a Panel de utilidades (Comando + Opción + 0) y seleccione Atributo Inspector (Comando + Opción + 4)
  3. Ahora seleccione Content in Edge y configure el recuadro según su requisito. (Vea la captura de pantalla)


Si solo estás buscando un relleno horizontal en una línea, entonces esto puede ser suficiente (fue para mí):

NSString* padding = @" "; // 2 spaces myLabel.text = [NSString stringWithFormat:@"%@%@%@", padding, name, padding];


Here Dave explica cómo agregar relleno a un título de UIButton, espero que esto ayude. Él usa la propiedad titleEdgeInsets en UIButton.


CGRectInset es tu amigo. Puede establecer ''insertos'' negativos para crear relleno:

[self sizeToFit]; CGRect rect = self.frame; rect = CGRectInset( rect, -6.f, -5.f); // h inset, v inset self.frame = rect;