[objective-c]平衡多线 UILabel

发布时间: 2016/10/2 2:54:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

何时创建 UILabeltextAlignement 设置为 NSTextAlignmentCenterlineBreakModeNSLineBreakByWordWrapping 和长的文本,它分裂像这样︰

+------------------------------------+
| Text that does not fit on a single |
|                line                |
+------------------------------------+

但我真的有点像这个样子︰

+------------------------------------+
|       Text that does not fit       |
|          on a single line          |
+------------------------------------+

当然,我想手动处理换行符。我想要自动平衡行,所以它们的长度都尽可能接近的标签。

解决方法 1:

我有同样的问题和鼓舞这个问题我找到了解决办法通过只重写- (void)drawTextInRect:(CGRect)rect

你可以看到它在此 GitHub 项目

该方法本身如果你只是想复制读它是在这里

- (void)drawTextInRect:(CGRect)rect {
    if (self.textAlignment == NSTextAlignmentCenter) {
        CGRect oneLineRect = [self textRectForBounds:CGRectInfinite limitedToNumberOfLines:1];
        NSInteger numberOfLines = ceil(oneLineRect.size.width / self.bounds.size.width);
        CGFloat betterWidth = (oneLineRect.size.width / numberOfLines);
        if (betterWidth < rect.size.width) {
            CGRect check = CGRectZero;
            do {
                betterWidth *= 1.1;
                CGRect b = CGRectMake(0, 0, betterWidth, CGRectInfinite.size.height);
                check = [self textRectForBounds:b limitedToNumberOfLines:0];
            } while (check.size.height > rect.size.height && betterWidth < rect.size.width);

            if (betterWidth < rect.size.width) {
                CGFloat difference = rect.size.width - betterWidth;
                rect = CGRectMake(rect.origin.x + difference/2.0, rect.origin.y, betterWidth, rect.size.height);
            }
        }
    }
    [super drawTextInRect:rect];
}

公关,叉子,评论,欢迎 !

赞助商