如何将UIImage和UILabel水平居中在一起?

问题描述:

我有一个用户图标和用户名标签 而且我希望图像和标签在屏幕上水平对齐。如何将UIImage和UILabel水平居中在一起?

由于标签的长度随用户名称的长度而变化(图像的大小是固定的) 我不能将该位置设置为固定值。

现在我在运行时更改图像和宽度的位置, 这很不方便。

有没有什么好的方法可以做到这一点?

谢谢:)

这里是快照:

enter image description hereenter image description hereenter image description here

所有权利。 我知道有没有一种非常方便的方式来做到这一点,只是与IB。 我学习了[label sizetoFit]的功能。 这非常有帮助。

在android中,使用xml布局来执行此操作非常方便。 但在ios中,我必须编写代码来控制图像和标签的位置。 是的...不是太糟糕。

谢谢大家:)

+1

你能发表一些快照吗? – 2012-03-13 05:33:41

+0

我已添加快照。图像的大小是固定的,但是位置应该随着标签的长度而改变。 对不起,我可怜的英语.. – 2012-03-13 05:40:06

[label sizetoFit]; 
label.center =imageView.center; 

这会使图像上的标签中心center..and它会出现在顶......

现在你可以使用CGRect操纵移动根据您的图片高度向下标注原始标签。

编辑..现在你可以做到这一点..

CGRect frame = label.frame; 
frame.origin.x -= imageview.frame.size.width/2 - 15; // you can change 15 to a more appropriate number based on your preference.. 
label.frame = frame; 

做好上面你做的两行代码在我的答案上顶后给予。

+0

[标签sizetoFit]效果很好。 但是label.center = imageView.center;没有; 也许我没有清楚表达。 图像和标签具有相同的positon.y,但position.x是不同的。 图像位于标签的左侧,标签位于图像的右侧。 – 2012-03-13 05:31:30

+1

用截图解释你想要什么..? – Shubhank 2012-03-13 05:35:55

+0

我已添加快照 – 2012-03-13 05:40:43

#define MARGIN 10.0f 

在你-layoutSubviews方法,这样做:

[ label sizeToFit ] ; 
CGRect r = label.frame ; 
r.origin = (CGPoint){ CGRectGetMaxX(imageView.frame) + MARGIN, CGRectGetMidY(imageView.frame) - 0.5 * r.size.height } ; 
label.frame = CGRectIntegral(r) ; 

更新这里是如何居中图像视图和标签单元

bounds应设置封闭视图的边界

// 
// center an image view + label in parent view, with label to right of image view 
// 

[ label sizeToFit ] ; 
CGSize size = (CGSize){ imageView.image.size.width + MARGIN + label.bounds.size.width, 
    MAX(imageView.image.size.height, label.bounds.size.height } ; 
CGRect r = (CGRect){ 
    { CGRectGetMidX(bounds) - 0.5 * size.width, 
     CGRectGetMidY(bounds) - 0.5 * size.height }, 
    size } 
} ; 

CGRect imageFrame, labelFrame ; 
CGRectDivide(r, &imageFrame, &labelFrame, imageView.image.size.width, CGRectMinXEdge) ; 
imageView.frame = imageFrame ; 
labelView.frame = labelFrame ; 
+0

其中'MARGIN'是您想要的图像视图的右边缘和标签的左边缘之间需要多少空间 – nielsbot 2012-03-13 05:43:19

+0

我应该指出“UILabel”中的文本居中垂直,所以你也可以设置标签的高度与图像视图的高度相同,以达到相同的效果。 – nielsbot 2012-03-13 05:45:11

+0

是的,高度是相同的。谢谢。我又添加了两个快照。 – 2012-03-13 05:47:50

做一些计算ation

UIImageView +偏移宽度的宽度(空间b/n UIImageView和UILabel“将此值保持为常量值”)+ UILabel Width =您将获得一些“X”宽度。

iPhone屏幕宽度为460.

320-X =剩余宽度。

剩余宽度/ 2将此值传递给UIImageView的X值。这可能会帮助你。

+0

是的,我这样做。但我很抱歉。也许宽度是320 :) – 2012-03-13 06:05:47

+0

抱歉我的错误! – 2012-03-13 06:39:26