如何调整属性字符串中符号图像的大小

How to size a symbol image in an attributed string

我有一个标签,我试图在标签的开头放置一个符号图像,然后在其后放置一些文本。这有效,但符号图像永远不会改变大小。无论我在 UIImageSymbolConfiguration 中提供什么大小,它都保持很小。如果我采用此代码并将图像放入 UIImageView,则图像会按预期变大。我在这里做的与符号图像配置相关的事情有问题吗?

    UILabel *label = [[UILabel alloc] init];
    NSString *title = @"Some Text";
    label.adjustsFontForContentSizeCategory = YES;
    
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"  %@", title] attributes:@{
        NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleBody],
        NSForegroundColorAttributeName: [UIColor labelColor]
    }];
    
    UIImageSymbolConfiguration *configuration = [UIImageSymbolConfiguration configurationWithFont:[UIFont preferredFontForTextStyle:UIFontTextStyleLargeTitle]];
    UIImage *squareImage = [[UIImage systemImageNamed:@"square.fill" withConfiguration:configuration] imageWithTintColor:[UIColor systemBlueColor]];
    NSTextAttachment *imageAttachment = [NSTextAttachment textAttachmentWithImage:squareImage];
    
    [string insertAttributedString:[NSAttributedString attributedStringWithAttachment:imageAttachment] atIndex:0];
    label.attributedText = string;

我今天在构建类似功能时偶然发现了同样的问题。嵌入文本附件时,符号的工作方式似乎略有不同:决定大小的是属性字符串上设置的字体,而不是符号本身的配置。

考虑到这一点,您只需确保属性字符串中图标的范围具有字体集:

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, 1)];

请注意,如果您打算使用不同的颜色进行渲染,您仍然需要配置符号。在这种情况下,属性字符串将在呈现符号时忽略 NSForegroundColorAttributeName 属性(导致空白,zero-width 符号)。我怀疑这是因为符号具有分层颜色,但我可能错了。