332 Stimmen

UILabel text margin

Ich möchte den linken Einschub/Rand einer UILabel und kann keine Methode finden, dies zu tun. Das Etikett hat einen Hintergrund festgelegt, so dass nur seine Herkunft ändern wird nicht den Trick tun. Es wäre ideal, den Text um 10px oder so auf der linken Seite.

14voto

tc. Punkte 33176

Wenn Sie keine zusätzliche übergeordnete Ansicht zum Einstellen des Hintergrunds verwenden möchten, können Sie die Unterklasse UILabel verwenden und die textRectForBounds:limitedToNumberOfLines: . Ich würde eine Eigenschaft textEdgeInsets oder ähnliches hinzufügen und dann tun

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
  return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds,textEdgeInsets) limitedToNumberOfLines:numberOfLines];
}

Aus Gründen der Robustheit können Sie auch [self setNeedsDisplay] in setTextEdgeInsets: aufrufen, aber ich mache mir normalerweise nicht die Mühe.

13voto

Recycled Steel Punkte 2252

Um die von Brody Robertson gegebene Antwort zu erweitern, können Sie die IB Designable Bits hinzufügen. Dies bedeutet, dass Sie die Beschriftung aus dem Storyboard heraus anpassen können.

enter image description here

In Ihrem unterklassigen UILabel tun

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface insetLabel : UILabel

@property (nonatomic, assign) IBInspectable CGFloat leftEdge;
@property (nonatomic, assign) IBInspectable CGFloat rightEdge;
@property (nonatomic, assign) IBInspectable CGFloat topEdge;
@property (nonatomic, assign) IBInspectable CGFloat bottomEdge;

@property (nonatomic, assign) UIEdgeInsets edgeInsets;

@end

Dann tun Sie das;

#import "insetLabel.h"

@implementation insetLabel

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

- (void)drawTextInRect:(CGRect)rect
{
    self.edgeInsets = UIEdgeInsetsMake(self.topEdge, self.leftEdge, self.bottomEdge, self.rightEdge);

    [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

EDIT

Sie sollten wahrscheinlich eine Setter-Methode für edgeInsets hinzufügen.

11voto

valvoline Punkte 7151

Vielleicht später für die Party, aber das Folgende funktioniert einfach. Einfach Unterklasse UILabel.

#import "UITagLabel.h"

#define padding UIEdgeInsetsMake(5, 10, 5, 10)

@implementation UITagLabel

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

- (CGSize) intrinsicContentSize {
    CGSize superContentSize = [super intrinsicContentSize];
    CGFloat width = superContentSize.width + padding.left + padding.right;
    CGFloat height = superContentSize.height + padding.top + padding.bottom;
    return CGSizeMake(width, height);
}

- (CGSize) sizeThatFits:(CGSize)size {
    CGSize superSizeThatFits = [super sizeThatFits:size];
    CGFloat width = superSizeThatFits.width + padding.left + padding.right;
    CGFloat height = superSizeThatFits.height + padding.top + padding.bottom;
    return CGSizeMake(width, height);
}

@end

9voto

rsc Punkte 9781

Hier ist eine rasche Lösung. Fügen Sie einfach diese benutzerdefinierte Klasse am Ende Ihrer Datei hinzu (oder erstellen Sie eine neue Datei dafür) und verwenden Sie MyLabel anstelle von UILabel, wenn Sie Ihr Etikett erstellen.

class MyLabel: UILabel{
    override func drawTextInRect(rect: CGRect) {
        super.drawTextInRect(UIEdgeInsetsInsetRect(rect, UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)))
    }
}

8voto

sig Punkte 5974

Ich fand nicht die UIButton in der

button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)

In m UIButton war die b

  • Ich hatte ein einfaches s
  • Ich hab' UIView a UILabel (
  • Ich hab' NSParagraphStyle ( tailIndent w- UILabel ist klein
  • Ich hab' UITextView (wegen der po
  • Ich habe UILabel (

Aus diesem Grund ist die Verwendung des contentEdgeInsets von UIButton in meinem b

Hoffnung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X