簡體   English   中英

如何在 UIView 上居中 UILabel

[英]How to center a UILabel on UIView

如何將 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 是視圖的子視圖:

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

除非 label 和視圖具有相同的超級視圖,否則不要使用view.center

如果沒有直接連接,那么您必須將視圖的中心轉換為標簽父級的坐標空間。 然后您可以將 PengOne 的答案與轉換點一起使用。

如果您擁有的是已設置的 label 並且您希望將其內容居中,請使用 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];

第二:如果 label 你想要居中,你可以在調用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

如果您的 UILabel 是通過.xib 添加的,或者以編程方式添加,則有兩種可能性。

如果第一種情況,即通過.xib 添加,那么您可以使用“排列”屬性從 xib 文件大小檢查器選項卡中設置 position

如果第二種情況仍然存在,那么您可以設置為 --- [self.label setCenter:view.center];

PengOne / Alex Lockwood 的回答簡單實用。 如果您打算支持旋轉,請添加以下內容以使其居中:

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

像這樣的東西應該可以解決問題...確保您的 label 設置為居中 alignment 並且足夠大/寬以處理您的文本字符串。

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)];

我認為這應該滿足您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM