我的应用程序加载时会设置一些常规样式:
[[UITextField appearanceWhenContainedIn:[NRWindow class], nil] setTintColor:kBlueColor];
[[UITextField appearanceWhenContainedIn:[NRWindow class], nil] setFont:[UIFont fontWithName:kFontNameLatoRegular size:14]];
[[UILabel appearanceWhenContainedIn:[NRWindow class], nil] setFontName:kFontNameLatoRegular];
由于某种原因,它会影响占位符字体大小。 在特定视图中,我想使用以下代码覆盖这些样式(仅用于占位符):
UIFont *font = [UIFont fontWithName:kFontNameLatoLight size:16];
self.emailTextField.font = font;
self.emailTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Email Address" attributes: @{ NSFontAttributeName:font}];
由于某种原因,占位符未获得正确的字体。 但是,如果我评论一般样式(appearanceWhenContainedIn)它的工作完美。有什么帮助吗?
由于
答案 0 :(得分:0)
解决方案
注意:请注意,此修补程序仅在iOS 6.0及更高版本上进行过测试。
要解决此错误,您必须创建UITextField的子类并覆盖-setAttributedPlaceHolder以将结果存储在ivar中。然后,您必须覆盖-drawPlaceholderInRect方法并枚举属性并使用NSAttributedString + NSStringDrawing(唯一的iOS 6特定方法)的-drawAtPoint方法绘制文本。这允许支持自定义属性,这可以在推文设计时提供帮助。
http://engineering.meetme.com/2013/11/uitextfield-attributedplaceholder-doesnt-work/
答案 1 :(得分:-2)
外出的答案,请不要这样做,我们还有其他选择
使用递归函数获取UITextField然后设置props
extension UIView {
func recursive_applyTheme_Search(
#dynamicTextStyle: NSString,
bgColor: UIColor,
cursorColor: UIColor,
textColor: UIColor,
placeholderTextColor: UIColor,
borderColor: UIColor,
borderWidth: CGFloat,
cornerRadius: CGFloat) {
for subview in self.subviews
{
if subview is UITextField {
(subview as! UITextField).applyThemeForSearchBar(
dynamicTextStyle: dynamicTextStyle,
bgColor: bgColor,
cursorColor: cursorColor,
textColor: textColor,
placeholderTextColor: placeholderTextColor,
borderColor: borderColor,
borderWidth: borderWidth,
cornerRadius: cornerRadius)
}
else { subview.recursive_applyTheme_Search(
dynamicTextStyle: dynamicTextStyle,
bgColor: bgColor,
cursorColor: cursorColor,
textColor: textColor,
placeholderTextColor: placeholderTextColor,
borderColor: borderColor,
borderWidth: borderWidth,
cornerRadius: cornerRadius) }
}
}
}