【发布时间】: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)];
【问题讨论】:
如何将 UILabel 置于 UIView 的中心?我正在使用以下代码
float width = weatherView.bounds.size.width;
float height = weatherView.bounds.size.height;
[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];
【问题讨论】:
怎么样:
[self.label setCenter:view.center];
【讨论】:
label.center.y = view.center.y 仅将 y 轴居中。对此点赞。
如果标签是视图的子视图:
[self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]
不要使用view.center,除非标签和视图具有相同的超级视图。
如果没有直接连接,则必须将视图的中心转换为标签父级的坐标空间。然后,您可以将 PengOne 的答案与转换点一起使用。
【讨论】:
如果您拥有的是已设置的标签并且您希望将其内容居中,请使用 NSTextAlignmentCenter。
cell.menuLabel.textAlignment = NSTextAlignmentCenter;
【讨论】:
更好的可能解决方案是:
首先:如果您以编程方式执行此操作,则需要使用框架和一些自定义项进行初始化:
// 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
PengOne / Alex Lockwood 的回答简单实用。如果您打算支持旋转,请添加以下内容以使其居中:
[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
【讨论】:
这样的事情应该可以解决问题... 确保您的标签设置为居中对齐,并且足够大/宽以处理您的文本字符串。
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)];
我认为这应该满足您的要求。
【讨论】:
如果您的 UILabel 是通过 .xib 添加或以编程方式添加,则有两种可能性。
如果第一种情况,即通过 .xib 添加,那么您可以使用“排列”属性从 xib 文件大小检查器选项卡设置位置
如果第二种情况仍然存在,那么您可以设置为 --- [self.label setCenter:view.center];
【讨论】: