0

我有一个视图,它在最左边有一个标签,然后是一个带有用户名的按钮,然后是他在右边按钮后面的评论。我想要做的是将标签放置在 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];
4

2 回答 2

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 除外,这是我们的计算值。

于 2013-11-07T21:20:37.513 回答
0

通过使用让它工作

[button sizeToFit];

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

于 2013-11-07T18:47:08.617 回答