如何在 UIView 上将 UILabel 居中

Posted

技术标签:

【中文标题】如何在 UIView 上将 UILabel 居中【英文标题】:How to center a UILabel on UIView 【发布时间】:2011-07-19 20:36:43 【问题描述】:

如何将 UILabel 置于 UIView 的中心?我正在使用以下代码

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];

【问题讨论】:

【参考方案1】:

怎么样:

[self.label setCenter:view.center];

【讨论】:

有效,但如果标签很长,则它不会居中。它要么向左要么向右。我认为定位是由 uilabel 的中心点确定的。 好吧...只有当标签和视图是同一视图的子视图时。如果标签是视图的子视图,则必须忽略位置,只考虑边界。 我使用界面设计器(拖放)添加了 UILabel。这是否意味着它是视图的子视图,我应该使用边界。 self.contentView.center 这让我label.center.y = view.center.y 仅将 y 轴居中。对此点赞。【参考方案2】:

如果标签是视图的子视图:

[self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]

不要使用view.center,除非标签和视图具有相同的超级视图。

如果没有直接连接,则必须将视图的中心转换为标签父级的坐标空间。然后,您可以将 PengOne 的答案与转换点一起使用。

【讨论】:

【参考方案3】:

如果您拥有的是已设置的标签并且您希望将其内容居中,请使用 NSTextAlignmentCenter。

cell.menuLabel.textAlignment = NSTextAlignmentCenter;

【讨论】:

这是最好的答案,将标签框居中并不足以使文本居中,如果您的标签已本地化,则非常有用! 我认为这可能是 OP 想要做的唯一正确答案。这是我想做的。【参考方案4】:

更好的可能解决方案是:

首先:如果您以编程方式执行此操作,则需要使用框架和一些自定义项进行初始化:

// Simple example
int yPosition = 10;
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)];
[label setText: @"Testing..."];
[label setBackgroundColor: [UIColor clearColor]];
[label setNumberOfLines: 0];
[label sizeToFit];

第二:如果一个标签是你想要居中的,你可以在调用setNumberOflines选择器并分配0 value之后运行它,你的文本将包含所有需要的行,并且sizeToFit调用方法进行良好的自定义,最后:

[self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)];

这将使only the X axis居中,Y axis 将在框架初始化中保持您想要的状态。

PS:如果不是UILabel,它也有效,但取决于您使用的控件是否需要另一个简单的自定义,如果您只想以编程方式居中但interface builder 设计,只需要运行second code

【讨论】:

self.view.frame.width 应该是self.view.frame.size.width【参考方案5】:

PengOne / Alex Lockwood 的回答简单实用。如果您打算支持旋转,请添加以下内容以使其居中:

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];

【讨论】:

【参考方案6】:

这样的事情应该可以解决问题... 确保您的标签设置为居中对齐,并且足够大/宽以处理您的文本字符串。

float viewWidth = weatherView.frame.size.width;
float viewHeight = weatherView.frame.size.height;
float labelWidth = label.frame.size.width;
float labelHeight = label.frame.size.height;

float xpos = (viewWidth/2.0f) - (labelWidth/2.0f);
float ypos = (viewHeight/2.0f) - (labelHeight/2.0f);

[label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)];

我认为这应该满足您的要求。

【讨论】:

我不知道标签的大小,因此我使用的是 siteToFit 方法。 上面的代码应该仍然可以工作,只要你在标签上进行任何初始化之后调用它【参考方案7】:

如果您的 UILabel 是通过 .xib 添加或以编程方式添加,则有两种可能性。

如果第一种情况,即通过 .xib 添加,那么您可以使用“排列”属性从 xib 文件大小检查器选项卡设置位置

如果第二种情况仍然存在,那么您可以设置为 --- [self.label setCenter:view.center];

【讨论】:

以上是关于如何在 UIView 上将 UILabel 居中的主要内容,如果未能解决你的问题,请参考以下文章

如何使 UITableView 的部分标题居中

在拆分视图中的 UIToolbar 上将文本注释完全居中

UILabel - 设置旋转框架

将两个不同大小的 UIView 水平居中

在全宽 UIView 内将 UILabel 和 UIImageView 水平对齐

创建约束以在视图中居中标签