UIButton:根据titleLabel Text计算UIButton的高度

Posted

技术标签:

【中文标题】UIButton:根据titleLabel Text计算UIButton的高度【英文标题】:UIButton: calculate height of UIButton based on titleLabel Text 【发布时间】:2012-09-21 18:32:29 【问题描述】:

我在自定义 UITableViewCell 中有一个自定义 UIButton。我想根据按钮 titleLabel 的可变文本内容在自定义表格单元格中设置 UIButton 的高度。

我尝试了以下方法来计算高度

[NSString sizeWithFont:constrainedToSize:lineBreakMode:];

但我无法根据 titleLabel 成功更改按钮高度。

此外,由于此按钮是自定义 UITableViewCell 的一部分,因此我还需要根据自定义 UIButton 的高度更改单元格的高度。

在实现UITableView的delegate和datasource方法的ViewController中,我尝试在下面的方法中确定高度

- (CGFloat) tableView: (UITableView *) tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath

但没有成功。

解决这个问题的最佳解决方案或方法是什么?

【问题讨论】:

在这里查看我的答案 - ***.com/questions/12506313/… 【参考方案1】:

假设您的按钮宽度为 145.0f:

CGSize constraintSize;

constraintSize.width = 145.0f;

constraintSize.height = MAXFLOAT;

CGSize size = [Label.text sizeWithFont:Label.font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

然后就可以设置框架了:

frame = CGRectMake(0, 0, 145, size.height);

【讨论】:

【参考方案2】:

看起来你做得对,但请记住:

heightForRowAtIndexPath 必须返回CGFloat sizeWithFont 为您提供文本高度,您需要添加按钮和单元格的填充

使用constrainedToSize:CGSizeMake(###,MAXFLOAT) 其中### 是您的文本宽度

lineBreakMode:UILineBreakModeWordWrap 当然

【讨论】:

【参考方案3】:

您也可以使用[buttonInstance sizeToFit]

 UIButton *lineButton = [[UIButton alloc] initWithFrame:CGRectZero];
 // If padding equals "yes, please"
 [lineButton setContentEdgeInsets:UIEdgeInsetsMake(0.0f, 5.0f, 0.0f, 3.0f)];
 [lineButton setTitle:@"Title" forState:UIControlStateNormal];
 [lineButton sizeToFit];

【讨论】:

以上是关于UIButton:根据titleLabel Text计算UIButton的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何根据titleLabel sizel调整UIButton的大小?

iOS Xcode:UIButton titleLabel 颜色不断变化

将 UIButton 的 titleLabel 文本与自动布局匹配在固定的恒定宽度上

UIButton.titleLabel 阴影正在剪裁

为 UIButton 设置 titleLabel

MvvmCross 绑定到 UIButton.TitleLabel.Text