将UIImage和UILabel集中在一起

时间:2013-06-02 03:47:23

标签: uiimage uilabel center

我想在我的标签文字中心,同时还要考虑一个20x20的图像,该图像应始终位于标签的左侧。具体来说,我有三个标签,其中的文字可以是任何内容,我希望一个复选标记始终显示在每个标签的左侧 - 这个位置会因文本长度而异。

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

1 个答案:

答案 0 :(得分: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

enter image description here