UIButton:在文本下方以 x pts 间距画一条线?

Posted

技术标签:

【中文标题】UIButton:在文本下方以 x pts 间距画一条线?【英文标题】:UIButton: draw a line below text with x pts spacing? 【发布时间】:2017-03-20 04:00:23 【问题描述】:

我需要在UIButton 中的文本下方画一条线,并且我看到一些项目在UIButton 内有下划线,通过使视图适合按钮的宽度并在高度约束下坚持其底部,但是这实际上不是我需要的,对于我的情况,我想我可能需要知道文本的位置/大小,以便将行精确地放置在文本下方?

谢谢!

编辑:

对不起,我需要注意的是,我不需要下划线,我需要的是按钮标题标签下方的选择指示符,比如我必须按钮:

标题 1 标题 2

目前突出显示在第一个按钮的标题下方,当我选择第二个按钮时,我希望它移动到第二个按钮的标题下方。

【问题讨论】:

【参考方案1】:

您可以为 UIButton 的 titleLabel 属性添加任意间距的边框。

Objective-C

CGFloat space = 10;

[_button setNeedsLayout];
[_button layoutIfNeeded];

CALayer *border = [[CALayer alloc] init];
border.backgroundColor = [UIColor  redColor].CGColor;
border.frame = CGRectMake(0, _button.titleLabel.frame.size.height + space, _button.titleLabel.frame.size.width, 1);
[_button.titleLabel.layer  addSublayer:border];

斯威夫特 3

    let space:CGFloat = 10

    button.setNeedsLayout()
    button.layoutIfNeeded()

    let border = CALayer()
    border.backgroundColor = UIColor.red.cgColor
    border.frame = CGRect(x: 0, y: (button.titleLabel?.frame.size.height)! + space, width: (button.titleLabel?.frame.size.width)!, height: 1)
    button.titleLabel?.layer.addSublayer(border)

【讨论】:

非常感谢,我会试试看的。【参考方案2】:

您正在寻找的是NSAttributedString。属性字符串可用于添加下划线或使文本变为粗体或任何其他属性。给UIButton添加下划线:

NSString *string = @"yo";

NSAttributedString *textString = [[NSAttributedString alloc] initWithString:string attributes:@NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)];

[mainButton setAttributedTitle:textString forState:UIControlStateNormal];

【讨论】:

感谢您的回答,但这并不是我所需要的,因为我需要对下划线做进一步的处理,比如对另一个按钮的标签进行动画处理。不过还是谢谢! 您应该在问题描述中添加该要求。【参考方案3】:

最简单的解决方案就是将按钮标题更改为属性字符串并设置下划线属性:

NSDictionary * underlineAttributes = @NSForegroundColorAttributeName:button.titleLabel.textColor, NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle);
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:button.titleLabel.text attributes:linkAttributes];            
[button.titleLabel setAttributedText:attributedString];

请注意,您还需要设置文本颜色属性,因为属性文本默认情况下不会使用按钮的标题颜色。

但是,如果您想更好地控制线条及其属性(位置、长度、高度等),它会稍微复杂一些,并且可能需要继承 UIButton 并覆盖 drawRect

【讨论】:

以上是关于UIButton:在文本下方以 x pts 间距画一条线?的主要内容,如果未能解决你的问题,请参考以下文章

具有比例宽度和文本驱动高度的动态 UILabel

如何将 UIButton 文本与 UILabel 文本垂直对齐?

c_cpp UIButton类别用于垂直居中标题标签和图像。文本标签位于图像下方。

c_cpp UIButton类别用于垂直居中标题标签和图像。文本标签位于图像下方。

IOS 13:UITextField rightView的间距问题

css 移动按钮 - 选择下方的间距以适应按钮 - gmob-1用于一个按钮 - gmob2用于两个按钮