iOS 开发:UIButton 使用 AttributedString 显示图像和文字失败问题?

- (UIButton*)searchBarButton{
    if (_searchBarButton == nil) {
        _searchBarButton = [UIButton buttonWithType:UIButtonTypeCustom];
        _searchBarButton.backgroundColor = [UIColor whiteColor];
        _searchBarButton.layer.cornerRadius = 8;
        _searchBarButton.layer.masksToBounds = YES;
        /*! 字体其他 */
        NSMutableAttributedString * attributedText = [[NSMutableAttributedString alloc] initWithString:@"A/B/C"];
        attributedText.yy_alignment = NSTextAlignmentLeft;
        attributedText.yy_font = [UIFont fontWithName:DSLFONT size:13];
        attributedText.yy_color = [UIColor grayColor];
        NSMutableAttributedString *attachment = nil;
        UIFont *font = [UIFont fontWithName:DSLFONT size:13];
        UIImageView*playVice = [UIImageView new];
        playVice.image = [UIImage imageNamed:@"MianSearch"];
        playVice.size = CGSizeMake(10, 10);
        attachment = [NSMutableAttributedString yy_attachmentStringWithContent:playVice contentMode:UIViewContentModeScaleAspectFill attachmentSize:playVice.size alignToFont:font alignment:YYTextVerticalAlignmentTop];
        [attributedText insertAttributedString:attachment atIndex:0];
        [_searchBarButton setAttributedTitle:attributedText forState:UIControlStateNormal];
        [_searchBarButton addTarget:self action:@selector(searchBarButtonButtonAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return _searchBarButton;
}

我想实现这种效果,image.png
但是以上代码无法实现,但是我没有找到问题所在,恳请帮助,非常感谢。

使用以上代码,多次尝试无效果。非常感谢。

阅读 686
avatarAI BotBETA

在你的代码中,有几个问题和潜在的误解需要解决。首先,yy_attachmentStringWithContent 和相关的 yy_ 方法(如 yy_alignment, yy_font, yy_color)并不是 NSMutableAttributedString 或 UIKit 标准库中的方法。这些方法看起来像是来自某个第三方库(如 YYText),但如果你没有正确导入和配置这个库,这些方法将不会工作。

此外,UIImageViewsize 属性并不是直接设置的,你需要通过 framebounds 来调整其大小。但在这个上下文中,你通常不需要直接操作 UIImageView 的大小,因为 attachmentSize 参数在创建附件时应该已经指定了大小。

下面是一个使用标准 UIKit 方法(不使用 YYText 或其他第三方库)来实现你的需求的示例代码。如果你确实需要使用 YYText,你需要确保已经正确安装并导入了该库。

使用 UIKit 标准方法

如果你不使用 YYText,你可以通过创建一个自定义的 UIView 来包含 UIImageViewUILabel,然后将这个自定义视图作为按钮的背景视图或内容视图。但这里,为了简化,我将展示如何使用 UIButtonsetImagesetTitle 方法来分别设置图像和文本(虽然这不会直接支持在同一行中混合文本和图像)。

如果你确实需要混合文本和图像,并且希望使用 NSAttributedString,你可能需要寻找或实现一个自定义的 UIButton 子类或使用像 YYText 这样的库。

示例代码(不使用 NSAttributedString 混合图像和文本)

- (UIButton*)searchBarButton {
    if (_searchBarButton == nil) {
        _searchBarButton = [UIButton buttonWithType:UIButtonTypeCustom];
        _searchBarButton.backgroundColor = [UIColor whiteColor];
        _searchBarButton.layer.cornerRadius = 8;
        _searchBarButton.layer.masksToBounds = YES;

        // 设置图像
        [_searchBarButton setImage:[UIImage imageNamed:@"MianSearch"] forState:UIControlStateNormal];
        [_searchBarButton setImageEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)]; // 根据需要调整图像的内边距

        // 设置标题
        [_searchBarButton setTitle:@"A/B/C" forState:UIControlStateNormal];
        [_searchBarButton.titleLabel setFont:[UIFont fontWithName:DSLFONT size:13]];
        [_searchBarButton.titleLabel setTextColor:[UIColor grayColor]];

        // 添加点击事件
        [_searchBarButton addTarget:self action:@selector(searchBarButtonButtonAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return _searchBarButton;
}

如果你确实需要更复杂的布局(如文本和图像在同一行),你可能需要查看像 YYText 这样的库,或者自己实现一个自定义的 UIButton 子类。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏