在 UIButton 的文本结尾之后定位 UILabel?

Posted

技术标签:

【中文标题】在 UIButton 的文本结尾之后定位 UILabel?【英文标题】:Positioning UILabel just after text ending of UIButton? 【发布时间】:2013-11-07 16:43:59 【问题描述】:

我有一个视图,它在最左边有一个标签,然后是一个带有用户名的按钮,然后是他在右边按钮后面的评论。我想要做的是将标签放置在 UIButton 文本结束的位置。在这种情况下,如果用户名是长或短的,评论将开始,用户名按钮和评论标签之间没有任何空格。我目前正在做这样的硬编码,如何根据 UIButtion 的文本大小实现 UILabel 的动态位置?,PfButton 是 UIButton 的子类 谢谢

PfButton *button = [PfButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:name forState:UIControlStateNormal];
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentEdgeInsets:UIEdgeInsetsMake(0, 13, 0, 0)];
[button setObjectId:objId];
[button addTarget:self action:@selector(profilePhotoButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(30, -7, 130, 20)];
[[button titleLabel] setTextAlignment:NSTextAlignmentLeft];
[view addSubview:button];

UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(160, -7, 150, 20)];
[messageLabel setFont:[UIFont systemFontOfSize:15]];
[messageLabel setText:msg];
[messageLabel setTextAlignment:NSTextAlignmentLeft];
[view addSubview:messageLabel];
[messageLabel release];

【问题讨论】:

按钮的titleLabelUIView 子类。你可以得到它的框架。使用它来定位您的其他标签。 我正在设置一个硬编码的框架,如何调整它的大小以使其仅覆盖按钮上的文本? 【参考方案1】:

如果您想让按钮比标签更宽,或者如果您更改按钮上的众多尺寸属性之一,则 sizeToFit 效果不佳。更好的解决方案是简单地将 titleLabel 的坐标系转换为按钮的超级视图。

CGRect buttonTitleFrame = button.titleLabel.frame;
CGRect convertedRect = [button convertRect:button.titleLabel.frame toView:button.superview];
CGFloat xForLabel = convertedRect.origin.x + buttonTitleFrame.size.width;
CGRect currentLabelFrame = label.frame;
CGRect labelFrame = CGRectMake(xForLabel, currentLabelFrame.origin.y, currentLabelFrame.size.width, currentLabelFrame.size.height);
label.frame = labelFrame;

第二行是这里的关键。您要求按钮将其中的矩形(在本例中为标题标签)转换为另一个视图中的矩形(在本例中为按钮超级视图,可能是您的视图控制器 self.view)。

第 3 行采用翻译后的原点并添加标签的精确宽度,第 5 行使用标签框架中的值,x 除外,这是我们的计算值。

【讨论】:

【参考方案2】:

通过使用让它工作

[button sizeToFit];

它给了我准确的框架,然后通过考虑按钮的 x 位置和宽度来计算标签的位置

【讨论】:

以上是关于在 UIButton 的文本结尾之后定位 UILabel?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton iOS 15 中的一行

如何使没有文本的 UIButton 成为其图像的大小?

UIButton中图像下的标签

iOS - 按下时 UIButton 的文本被设置回笔尖设置值

当 UILabel 文本长度较大时,UILabel 或 UIButton 类似于“查看更多”

如何设置 UILabel 以通过 AutoLayout 包装 UIButton?