UIButton:用x pts间距在文本下面画一条线?

时间:2017-03-20 04:00:23

标签: ios objective-c uibutton uikit

我需要在import io from 'socket.io-client' 中的文字下方画一条线,我看到一些项目在UIButton内有下划线,有一个适合按钮宽度的视图,并且粘贴在底部有一个高度限制,但实际上并不是我所需要的,对于我的情况,我认为我可能需要知道文本的位置/大小,以便将行准确地放在文本下面?

谢谢!

编辑:

对不起,我需要注意的是,我不需要只是一个下划线,我需要的是按钮标题标签下方的选择指示器,说我必须按钮:

Title1 Title2

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

3 个答案:

答案 0 :(得分:1)

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

<强>目标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];

Swift 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)

答案 1 :(得分:0)

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

NSString *string = @"yo";

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

[mainButton setAttributedTitle:textString forState:UIControlStateNormal];

答案 2 :(得分:0)

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

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

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

但是,如果你想要更多地控制线及其属性(位置,长度,高度等),它会更复杂,并且可能需要子类化UIButton并覆盖drawRect