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

时间:2014-04-08 09:32:05

标签: ios objective-c uilabel vertical-alignment nsattributedstring

我们如何对标签进行子类化,以便它显示如下文本 前缀(与顶部对齐),文字后缀(与底部对齐)。

我目前在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;
}

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

1 个答案:

答案 0 :(得分:1)

使用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;

}