NSAttributedString inserting a bullet point?

前端 未结 6 1898
眼角桃花
眼角桃花 2020-12-07 17:00

So I have an NSAttributedString I want to insert a bullet point at the beginning of a portion of text. How can I do this? How do I create a C

6条回答
  •  失恋的感觉
    2020-12-07 17:33

    Here is Krunal's excellent answer in Objective-C. It also removes the paragraph spacing on the last bullet item to avoid the extra bottom padding on the UILabel.

    UILabel *label = [UILabel new];
    label.frame = CGRectMake(40, 100, 280, 600);
    label.textColor = UIColor.lightGrayColor;
    label.numberOfLines = 0;
    
    NSArray *stringArray = @[@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
                             @"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
                             @"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
                             @"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                             ];
    
    label.attributedText = [self attributedStringForBulletTexts:stringArray
                                                       withFont:label.font
                                                   bulletString:@""
                                                    indentation:20
                                                    lineSpacing:2
                                               paragraphSpacing:12
                                                      textColor:UIColor.grayColor
                                                    bulletColor:UIColor.greenColor];
    

    And here is the function which creates the actual attributed text:

    - (NSAttributedString *)attributedStringForBulletTexts:(NSArray *)stringList
                                                  withFont:(UIFont *)font
                                              bulletString:(NSString *)bullet
                                               indentation:(CGFloat)indentation
                                               lineSpacing:(CGFloat)lineSpacing
                                          paragraphSpacing:(CGFloat)paragraphSpacing
                                                 textColor:(UIColor *)textColor
                                               bulletColor:(UIColor *)bulletColor {
    
        NSDictionary *textAttributes = @{NSFontAttributeName: font,
                                     NSForegroundColorAttributeName: textColor};
        NSDictionary *bulletAttributes = @{NSFontAttributeName: font, NSForegroundColorAttributeName: bulletColor};
    
        NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
        paragraphStyle.tabStops = @[[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentLeft location:indentation options:@{}]];
        paragraphStyle.defaultTabInterval = indentation;
        paragraphStyle.lineSpacing = lineSpacing;
        paragraphStyle.paragraphSpacing = paragraphSpacing;
        paragraphStyle.headIndent = indentation;
    
        NSMutableAttributedString *bulletList = [NSMutableAttributedString new];
    
        for (NSString *string in stringList) {
            NSString *formattedString = [NSString stringWithFormat:@"%@\t%@\n", bullet, string];
            NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:formattedString];
            if ([string isEqualToString: stringList.lastObject]) {
                paragraphStyle = [paragraphStyle mutableCopy];
                paragraphStyle.paragraphSpacing = 0;
            }
            [attributedString addAttributes:@{NSParagraphStyleAttributeName: paragraphStyle} range:NSMakeRange(0, attributedString.length)];
            [attributedString addAttributes:textAttributes range:NSMakeRange(0, attributedString.length)];
    
            NSRange rangeForBullet = [formattedString rangeOfString:bullet];
            [attributedString addAttributes:bulletAttributes range:rangeForBullet];
            [bulletList appendAttributedString:attributedString];
        }
    
        return bulletList;
    }
    

提交回复
热议问题