最近小编在项目中遇到了一个问题,就是当textField
的textFont
与placeholder
的font
相差较大时,placeholder
的位置竟然偏移了,没有垂直居中
原来的代码
UITextField *textField = [[UITextField alloc]init];
textField.delegate = self;
textField.backgroundColor = [UIColor orangeColor];
textField.font = [UIFont systemFontOfSize:25];
textField.textColor = [UIColor redColor];
textField.textAlignment = NSTextAlignmentLeft;
NSString *text = @"可提现金额300元";
NSMutableAttributedString *titleStr = [[NSMutableAttributedString alloc]initWithString:text];
[titleStr addAttributes:@{NSFontAttributeName:kFont(10)} range:NSMakeRange(0, titleStr.length)];
textField.attributedPlaceholder = titleStr;
[self.view addSubview:textField];
原来的placeholder效果图.jpg
原来的text的效果图.jpg
怎么办?就这样的效果ui妹子非要把我祭天不可,没办法,只有赶快弄清楚为什么会出现这个问题,然后才能根据原理去修复这个bug。
根据上网查资料才得知问题所在:
placeholder
在UITextField
的位置是以输入文字光标的上端点作为它的显示位置,所以当我们设置的placeholder字体大小与textField设置的输入文字大小差别很大时,placeholder的显示位置就不会垂直居中而发生偏移。
解决方法:
小编经过多次尝试之后发现都不行,最后看到了NSMutableParagraphStyle
,我决定使用这个再试试
// 段落样式
NSMutableParagraphStyle *style = [textField.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy];
// minimumLineHeight 最小行高 改变placeholder的最小行高
style.minimumLineHeight = textField.font.lineHeight - (textField.font.lineHeight - kFont(10).lineHeight)/2.0;
style.lineSpacing = 10; // 字体的行间距
style.firstLineHeadIndent = 15.f; //首行缩进
NSString *text = @"可提现金额300元";
NSMutableAttributedString *titleStr = [[NSMutableAttributedString alloc]initWithString:text];
[titleStr addAttributes:@{NSFontAttributeName:kFont(10), NSParagraphStyleAttributeName:style} range:NSMakeRange(0, titleStr.length)];
textField.attributedPlaceholder = titleStr;
[self.view addSubview:textField];
最后的效果图:
没有设置首行缩进
设置了首行缩进
输入了文字之后
好了,问题解决了,怕以后再次遇到,就记录一下吧,顺便帮那些遇到这个问题的提供个思路吧~~吼吼