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 间距画一条线?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIButton 文本与 UILabel 文本垂直对齐?
c_cpp UIButton类别用于垂直居中标题标签和图像。文本标签位于图像下方。
c_cpp UIButton类别用于垂直居中标题标签和图像。文本标签位于图像下方。