• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用自动布局创建的 UILabel 不显示 NSMutableAttributedString 的属性

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:32:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个使用编程自动布局创建的 UILabel 对象 calloutLabel:

- (void)setupCalloutLabel
{
    UILabel *calloutLabel = [UILabel newAutoLayoutView];
    calloutLabel.backgroundColor = [UIColor clearColor];
    calloutLabel.textAlignment = NSTextAlignmentCenter;
    calloutLabel.numberOfLines = 2;
    _calloutLabel = calloutLabel;
    [self addSubview:calloutLabel];

    NSNumber *padding = @(10.0f);
    NSNumber *calloutLabelHeight = @(132.0f);
    NSDictionary *calloutLabelMetrics = NSDictionaryOfVariableBindings(padding, calloutLabelHeight);

    UIImageView *logoImageView = _logoImageView;
    NSDictionary *ecalloutLabelViews = NSDictionaryOfVariableBindings(calloutLabel, logoImageView);

    NSLayoutConstraint *calloutLabelHorizontalConstraint = [NSLayoutConstraint constraintWithItem:calloutLabel
                                                                                        attribute:NSLayoutAttributeWidth
                                                                                        relatedBy:NSLayoutRelationEqual
                                                                                           toItem:self
                                                                                        attribute:NSLayoutAttributeWidth
                                                                                       multiplier:1.0f
                                                                                         constant:0.0f];

    NSArray *calloutLabelVerticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat"V:[logoImageView]-(padding)-[calloutLabel(calloutLabelHeight)]"
                                                                                       options:NSLayoutFormatAlignAllCenterX
                                                                                       metrics:calloutLabelMetrics
                                                                                         views:ecalloutLabelViews];

    [self addConstraint:calloutLabelHorizontalConstraint];
    [self addConstraints:calloutLabelVerticalConstraints];
    [self setNeedsLayout];
    [self layoutIfNeeded];
}

在后面的代码中,我用以下内容动态更新了 _calloutLabel.attributedText:

    NSString *calloutString = offer[kAPIAttributeOffersOfferCallout];
    NSMutableAttributedString *calloutAttributedString = [[NSMutableAttributedString alloc] initWithString:calloutString];

    NSString *firstLine = nil;
    NSScanner *calloutScanner = [NSScanner scannerWithString:calloutString];
    [calloutScanner scanUpToString"\n" intoString:&firstLine];
    NSRange firstLineRange = NSRangeFromString(firstLine);
    NSDictionary *firstLineAttributes = @{NSFontAttributeName : [UIFont fontWithName:kFontNameSemibold size:48.0f],
                                          NSForegroundColorAttributeName : [UIColor colorWithHex:kColorLightBlue andAlpha:1.0f]};
    [calloutAttributedString addAttributes:firstLineAttributes range:firstLineRange];

    NSString *secondLine = nil;
    [calloutScanner scanUpToString"" intoString:&secondLine];
    NSRange secondLineRange = NSRangeFromString(secondLine);
    NSDictionary *secondLineAttributes = @{NSFontAttributeName :[UIFont fontWithName:kFontNameSemibold size:30.0f],
                                           NSForegroundColorAttributeName : [UIColor colorWithHex:kColorLightBlue andAlpha:1.0f]};
    [calloutAttributedString addAttributes:secondLineAttributes range:secondLineRange];

    _calloutLabel.attributedText = calloutAttributedString;

它应该是这样的: enter image description here

实际上是这样的: enter image description here

我是不是在某个地方犯了错误?

谢谢!



Best Answer-推荐答案


NSRangeFromString 用于从它的字符串表示中创建一个范围(例如@“{1,5}”),而不是获取扫描字符串的范围。

您真正想要做的是将范围设置为扫描仪位置,所以

NSRange firstLineRange = NSMakeRange(0, calloutScanner.scanLocation);

对于第二个位置,您可以跳过扫描,只需使用字符串的长度

NSRange secondLineRange = NSMakeRange(firstLineRange.length + 1, [calloutString length] - firstLineRange.length - 1);

关于ios - 使用自动布局创建的 UILabel 不显示 NSMutableAttributedString 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27005774/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap