在自动布局中向UILabel添加填充

时间:2017-08-31 13:46:22

标签: ios objective-c uilabel ios-autolayout

如何在使用自动布局定位和调整大小时为UILabel添加填充?

我尝试了对它进行子类化并覆盖drawTextInRect:方法,如下所示:

- (void)drawTextInRect:(CGRect)rect {

    CGFloat borderWidth = 5;

    CGFloat doubleBigSquareRadius = CGRectGetWidth(rect);
    CGFloat doubleSmallSquareRadius = doubleBigSquareRadius - borderWidth * 2;

    CGFloat smallSquareSideSize = doubleSmallSquareRadius / sqrt(2);
    CGFloat smallSquareOffset = (doubleBigSquareRadius - smallSquareSideSize) / 2;

    CGSize smallSquareSize = CGSizeMake(smallSquareSideSize, smallSquareSideSize);
    CGPoint smallSquareOrigin = CGPointMake(smallSquareOffset, smallSquareOffset);

    CGRect smallSquareFrame = CGRectMake(smallSquareOrigin.x, smallSquareOrigin.y, smallSquareSize.width, smallSquareSize.height);

    [super drawTextInRect:smallSquareFrame];
}

但它根本没有被调用。

2 个答案:

答案 0 :(得分:0)

  

但它根本没有被召唤。

也许是因为你的标签不是你的子类的实例?

在这里,从这个简单的样本开始:

- (void)drawTextInRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextStrokeRect(context, CGRectInset(self.bounds, 1.0, 1.0));
    [super drawTextInRect:CGRectInset(rect, 5.0, 5.0)];
}

您需要一个UILabel子类。在您的子类中实现它。然后确保您的 UILabel 是该子类的实际实例。 (如果您在笔尖中创建标签,则默认情况下不会。)

(另请注意,autolayout不会神奇地知道此标签与普通标签的行为有所不同,因此您 也可能必须覆盖intrinsicContentSize,具体取决于您的使用情况case,以便让标签按照你想要的方式调整尺寸。)

答案 1 :(得分:0)

我的drawTextInRect:方法是由KAProgressLabel直接调用super方法here引起的。