垂直顶部对齐UILabel中的部分文本

我们如何能够对一个标签进行子类化,使其显示如下前缀 (对齐到顶部), 文本后缀 (对齐到底部)的文本

我目前在UILabel的子类中使用了以下方法

-(void)setText:(id)text withPrefixText:(id)prefixText andSuffixText:(id)suffixText {

    NSString * compondText = [self textByCompoundingText:text withPrefixText:prefixText WithsuffixText:suffixText];
    NSMutableAttributedString * attributedCompoundText = [[NSMutableAttributedString alloc] initWithString:compondText];

    NSMutableDictionary * prefixTextAttributes = [@{} mutableCopy];
    prefixTextAttributes[NSFontAttributeName]  = _prefixTextFont? _prefixTextFont:self.font;
    prefixTextAttributes[NSForegroundColorAttributeName] = _prefixTextColour? _prefixTextColour:self.textColor;
    prefixTextAttributes[(NSString*)kCTSuperscriptAttributeName] = [NSNumber numberWithUnsignedInteger:_prefixTextVerticalPositionning];

    NSMutableDictionary * suffixTextAttributes = [@{} mutableCopy];
    suffixTextAttributes[NSFontAttributeName]  = _suffixTextFont? _suffixTextFont:self.font;
    suffixTextAttributes[NSForegroundColorAttributeName] = _suffixTextColour ?_suffixTextColour:self.textColor;
    suffixTextAttributes[(NSString*)kCTSuperscriptAttributeName] = [NSNumber numberWithUnsignedInteger:_suffixTextVerticalPostioning];

    if(prefixText)
        [attributedCompoundText addAttributes:prefixTextAttributes  range:[compondText rangeOfString:prefixText]];
    if(suffixText)
        [attributedCompoundText addAttributes:suffixTextAttributes  range:[compondText rangeOfString:suffixText]];

    self.attributedText = attributedCompoundText;
}

但是,这将文本设置为不能解决问题的上标。 前缀文本和文本的顶部应该相同,但前缀文本应该垂直顶部与较小的字体对齐!


使用NSBaselineOffsetAttributeName解决了我的问题,使用这个我们可以指定底部的偏移量。+ ve用于上标,-ve用于下标

   -(void)setText:(id)text withPrefixText:(id)prefixText andSuffixText:(id)suffixText
    {
     NSString * compondText = [self textByCompoundingText:text withPrefixText:prefixText      WithsuffixText:suffixText];
NSMutableAttributedString * attributedCompoundText = [[NSMutableAttributedString alloc] initWithString:compondText];

NSMutableDictionary * prefixTextAttributes = [@{} mutableCopy];
prefixTextAttributes[NSFontAttributeName]  = _prefixTextFont? _prefixTextFont:self.font;
prefixTextAttributes[NSForegroundColorAttributeName] = _prefixTextColour? _prefixTextColour:self.textColor;
NSNumber *baselineOffSet =[NSNumber numberWithUnsignedInteger:_prefixTextVerticalPositionning];
prefixTextAttributes[(NSString*)NSBaselineOffsetAttributeName] = baselineOffSet;

NSMutableDictionary * suffixTextAttributes = [@{} mutableCopy];
suffixTextAttributes[NSFontAttributeName]  = _suffixTextFont? _suffixTextFont:self.font;
suffixTextAttributes[NSForegroundColorAttributeName] = _suffixTextColour ?_suffixTextColour:self.textColor;
baselineOffSet = [NSNumber numberWithUnsignedInteger:_suffixTextVerticalPostioning];
suffixTextAttributes[(NSString*)NSBaselineOffsetAttributeName] = baselineOffSet;

if(prefixText)
    [attributedCompoundText addAttributes:prefixTextAttributes  range:[compondText rangeOfString:prefixText]];
if(suffixText)
    [attributedCompoundText addAttributes:suffixTextAttributes  range:[compondText rangeOfString:suffixText]];

self.attributedText = attributedCompoundText;

}

链接地址: http://www.djcxy.com/p/4845.html

上一篇: Vertically top align the part of text in UILabel

下一篇: line UILabel in Auto Layout