在 iOS 開發中,直接設置 UITextField 的 layer.borderColor 往往不生效,原因是缺少必要的 QuartzCore 框架導入以及缺少關鍵的圖層屬性配置。
在項目設定的 "Build Phases" -> "Link Binary With Libraries" 中添加 QuartzCore.framework,並在代碼中導入頭文件:
#import <QuartzCore/QuartzCore.h>
僅設置 borderColor 是不夠的,必須同時設置 borderWidth、cornerRadius 並啟用 masksToBounds:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
// 設置圓角半徑
textField.layer.cornerRadius = 8.0f;
// 裁剪超出圓角範圍的內容
textField.layer.masksToBounds = YES;
// 設置邊框顏色(需轉換為 CGColor)
textField.layer.borderColor = [[UIColor redColor] CGColor];
// 設置邊框寬度(默認為 0,不設置則不可見)
textField.layer.borderWidth = 1.0f;
return YES;
}
borderWidth = 0,不顯式設置寬度邊框永遠不可見。UIColor 必須通過 CGColor 屬性轉換後賦給 borderColor。masksToBounds = YES 確保邊框和內容隨圓角裁剪,否則邊框會呈現矩形。textFieldShouldBeginEditing: 在編輯開始時設置,也可在 viewDidLoad 中統一初始化樣式。建議封裝工具方法,支持正常、聚焦、錯誤等多狀態樣式切換:
- (void)setTextField:(UITextField *)textField
borderColor:(UIColor *)color
withWidth:(CGFloat)width
cornerRadius:(CGFloat)radius {
textField.layer.borderColor = color.CGColor;
textField.layer.borderWidth = width;
textField.layer.cornerRadius = radius;
textField.layer.masksToBounds = YES;
}