首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 讓 UILabel 在父視圖中垂直水平居中:自適應寬高的最佳實踐

     編輯:程式設計綜合問答

要讓 UILabel 在父視圖完美居中,且寬高隨文本內容自適應,核心步驟是:先計算文本尺寸,再設置 Label 的 frame,最後將 center 設為父視圖的 center。

標準實現代碼

NSString *text = @"動態文本內容...";
UIFont *font = [UIFont systemFontOfSize:15];
CGFloat maxWidth = 300; // 限制最大寬度,高度不限

// 計算文本實際佔用尺寸
CGSize textSize = [text boundingRectWithSize:CGSizeMake(maxWidth, CGFLOAT_MAX)
    options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
    attributes:@{NSFontAttributeName: font}
    context:nil].size;

// 創建 Label 並設置 frame
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ceil(textSize.width), ceil(textSize.height))];
label.text = text;
label.font = font;
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentCenter;

// 關鍵:設置 center 實現絕對居中
label.center = self.view.center;
[self.view addSubview:label];

關鍵點解析

  • 寬度限制:boundingRectWithSize 的 width 傳具體值(如 300),height 傳 CGFLOAT_MAX 表示不限制高度。
  • 取整:ceil() 避免子像素導致模糊。
  • center 屬性:直接賦值 self.view.center 同時實現水平垂直居中,無需手動計算 x/y。
  • 多行支持:numberOfLines = 0 必須設置。

Auto Layout 時代的替代方案

若使用約束,只需:

label.translatesAutoresizingMaskIntoConstraints = false;
[NSLayoutConstraint activateConstraints:@[
    label.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor),
    label.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor),
    label.widthAnchor.constraintLessThanOrEqualToConstant(300)
]];
label.text = text; // 內容變化自動更新佈局

Frame 佈局適合簡單場景,Auto Layout 更利於維護與適配。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved