我在UILabel
中为文本添加了几个像素的相当宽的笔划,并且根据行间距,如果文本的边缘触摸标签的边缘,则边缘如果它们超出标签的范围,则可以切断笔划。 如何防止这种情况?以下是我用于应用笔画的代码(目前为5px):
- (void) drawTextInRect: (CGRect) rect
{
UIColor *textColor = self.textColor;
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(c, 5);
CGContextSetLineJoin(c, kCGLineJoinRound);
CGContextSetTextDrawingMode(c, kCGTextStroke);
self.textColor = [UIColor colorWithRed: 0.165 green: 0.635 blue: 0.843 alpha: 1.0];
[super drawTextInRect: rect];
}
以下是标签侧面剪裁的示例,我认为需要发生的事情之一是:
答案 0 :(得分:3)
是的,裁剪只是没有用。
但是,如果您在UILabel
子类上创建插图,该怎么办?你需要制作标签的框架,然后设置你的插图。当您绘制文本时,它将使用insets为您提供所需边缘的填充。
缺点是,您无法在IB中一眼判断换行。你必须拿走你的标签并减去你的插图,然后你会看到它在屏幕上看起来真的如何。
·H
@interface MyLabel : UILabel
@property (nonatomic) UIEdgeInsets insets;
@end
的.m
@implementation MyLabel
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.insets = UIEdgeInsetsMake(0, 3, 0, 3);
}
return self;
}
- (void)drawRect:(CGRect)rect {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSaveGState(c);
CGRect actualTextContentRect = rect;
actualTextContentRect.origin.x += self.insets.left;
actualTextContentRect.origin.y += self.insets.top;
actualTextContentRect.size.width -= self.insets.right;
actualTextContentRect.size.height -= self.insets.bottom;
CGContextSetLineWidth(c, 5);
CGContextSetLineJoin(c, kCGLineJoinRound);
CGContextSetTextDrawingMode(c, kCGTextStroke);
self.textColor = [UIColor colorWithRed: 0.165 green: 0.635 blue: 0.843 alpha: 1.0];
[super drawTextInRect:actualTextContentRect];
CGContextRestoreGState(c);
self.textColor = [UIColor whiteColor];
[super drawTextInRect:actualTextContentRect];
}
修改:为我的UILabel
子类添加了完整代码。稍微修改了代码以显示大笔划和正常字母。
答案 1 :(得分:1)
您应该在sizeThatFits:
子类上实现UILabel
以返回稍大的首选大小,并考虑笔划所需的额外空间。然后,您可以使用sizeThatFits:
的结果正确计算标签的框架,或者只需拨打sizeToFit
。