0

我想将标签的文本居中,同时还要考虑应该始终位于标签左侧的 20x20 图像。具体来说,我有三个标签,其文本可以是任何内容,并且我希望一个复选标记始终出现在每个标签的左侧 - 这个位置会根据文本长度而有所不同。

我最好的猜测是使图像成为标签的子视图,然后缩进文本,但这仍然会有些不一致......

4

1 回答 1

1

在 iOS 6 中,您可以通过约束和几乎没有代码来做到这一点。但是对于仅使用弹簧和支柱的 iOS 5,您需要自己管理视图框架。您还需要调用sizeToFit,以便 UILabel 将其自身调整为当前文本。

这是一些示例代码:

- (void)centerLabels
{
    CGRect viewFrame = self.view.frame;
    NSArray *allLabelsAndChecks = @[ @[self.label1, self.check1], @[self.label2, self.check2], @[self.label3, self.check3] ];

    for (NSArray *labelAndCheck in allLabelsAndChecks) {
        UILabel     *label = labelAndCheck[0];
        UIImageView *check = labelAndCheck[1];

        [label sizeToFit];

        CGRect labelFrame = label.frame;
        CGRect checkFrame = check.frame;

        CGFloat maxWidth = viewFrame.size.width - (leftMarginText + rightMargin);

        if (labelFrame.size.width > maxWidth) {
            labelFrame.origin.x   = leftMarginText;
            labelFrame.size.width = maxWidth;
            checkFrame.origin.x = leftMarginImage;
        } else {
            CGFloat slideRight = (maxWidth - labelFrame.size.width) / 2.0;
            labelFrame.origin.x = leftMarginText + slideRight;
            checkFrame.origin.x = leftMarginImage + slideRight;
        }

        label.frame = labelFrame;
        check.frame = checkFrame;
    }
}

完整的演示项目可以在这里找到:https ://github.com/GayleDDS/TestCenteredLabel.git

在此处输入图像描述

于 2013-06-05T00:17:49.817 回答