美文网首页
UITextField的placeholder没有垂直居中

UITextField的placeholder没有垂直居中

作者: 涛昇依旧 | 来源:发表于2018-02-02 14:33 被阅读183次

    最近小编在项目中遇到了一个问题,就是当textFieldtextFontplaceholderfont相差较大时,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。
    根据上网查资料才得知问题所在:

    placeholderUITextField的位置是以输入文字光标的上端点作为它的显示位置,所以当我们设置的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];
    

    最后的效果图:


    没有设置首行缩进
    设置了首行缩进
    输入了文字之后

    好了,问题解决了,怕以后再次遇到,就记录一下吧,顺便帮那些遇到这个问题的提供个思路吧~~吼吼

    相关文章

      网友评论

          本文标题:UITextField的placeholder没有垂直居中

          本文链接:https://www.haomeiwen.com/subject/npgszxtx.html