如何在 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 居中的主要内容,如果未能解决你的问题,请参考以下文章