我想在我的标签文字中心,同时还要考虑一个20x20的图像,该图像应始终位于标签的左侧。具体来说,我有三个标签,其中的文字可以是任何内容,我希望一个复选标记始终显示在每个标签的左侧 - 这个位置会因文本长度而异。
我最好的猜测是将图片作为标签的子视图,然后缩进文本,但仍然会有些不一致......
答案 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