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