在 iOS 开发过程中,有时需要对 UITextField 的 placeholder 的字体、字体颜色等属性进行定制。

对于字体和字体颜色等属性,可以通过将一个 NSAttributedString 指定给 UITextField.attributedPlaceholder 即可。
但是有时当 placeholder 的字号小于 text 的字号时,placeholder 会显示偏上,不在 UITextField 的垂直中心,这时就要对之前的属性字符串添加有关行高的属性来解决这个问题。

1
2
3
4
5
6
7
8
9
10
UIFont *font = [UIFont systemFontOfSize:14];
NSMutableParagraphStyle *style = [self.textField.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy];
style.minimumLineHeight = self.textField.font.lineHeight - (self.textField.font.lineHeight - font.lineHeight) / 2.0;
NSDictionary *attrs = @{NSForegroundColorAttributeName: [UIColor say_colorWithRGBHex:0xC7C7C7],
NSFontAttributeName: [UIFont systemFontOfSize:14],
NSParagraphStyleAttributeName: style};
NSAttributedString *placeholder = [[NSAttributedString alloc]
initWithString:@"Hello, world!"
attributes:attrs];
self.textField.attributedPlaceholder = placeholder;

参考资料: