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

Posted

技术标签:

【中文标题】在自动布局中向 UILabel 添加填充【英文标题】:Add padding to UILabel in Auto Layout 【发布时间】:2017-08-31 13:46:21 【问题描述】:

如何在使用自动布局定位和调整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];

但它根本没有被调用。

【问题讨论】:

【参考方案1】:

但它根本没有被调用。

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

在这里,从这个简单的示例开始:

- (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 该子类的实际实例。 (如果您在笔尖中创建标签,则默认情况下不会。)

(另请注意,自动布局不会神奇地知道此标签的行为与普通标签有任何不同,因此您可能必须覆盖intrinsicContentSize,具体取决于您的用例,以便让标签按照您想要的方式调整大小。)

【讨论】:

我实际上是在尝试修改this library,所以我100% 是KAProgressLabel 实例而不是简单的UILabel 实例,因为它不会显示彩色进度。 那么你没有提供足够的信息,因为我向你保证所说的有效。您需要查看可下载项目中的工作示例吗? 我将尝试创建一个简单的演示并尝试重现它。 我在创建演示项目时发现了问题。感谢您的关注。【参考方案2】:

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

【讨论】:

以上是关于在自动布局中向 UILabel 添加填充的主要内容,如果未能解决你的问题,请参考以下文章

带有自动布局的 uilabel 使用填充调整大小

UITableview 单元格内的 UILabel,自动布局填充问题

如何将自动布局约束添加到 tableview headerView 内的多行 UILabel?

UIView 中的自动布局 UILabel

在 Swift 中向 UILabel 动态添加行

如何在自动布局中以编程方式执行 uilabel