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.
Antworten
Zu viele Anzeigen?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.
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.
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.
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
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)))
}
}
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
aUILabel
( - 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