28

如何在中添加下划线文本UILabel

我曾尝试制作UILabel高度为0.5f的 a并将其放在文本下方。当我在iPhone 4.3iPhone 4.3 模拟器中运行我的应用程序时,此行标签不可见,但在iPhone 5.0 模拟器之后可见。为什么?

我怎样才能做到这一点?

4

7 回答 7

82

Objective-C

iOS 6.0 > 版本

UILabel支持NSAttributedString

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Hello Good Morning"];
[attributeString addAttribute:NSUnderlineStyleAttributeName
                        value:[NSNumber numberWithInt:1]
                        range:(NSRange){0,[attributeString length]}];

迅速

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Hello Good Morning")
attributeString.addAttribute(NSUnderlineStyleAttributeName, value: 1, range: NSMakeRange(0, attributeString.length))

定义

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange

Parameters List:

name:指定属性名称的字符串。属性键可以由另一个框架提供,也可以是您定义的自定义键。有关在何处查找系统提供的属性键的信息,请参阅 NSAttributedString 类参考中的概述部分。

value:与 name 关联的属性值。

aRange:指定属性/值对适用的字符范围。

现在像这样使用:

yourLabel.attributedText = [attributeString copy];

iOS 5.1.1 < 版本

您需要3 party attributed Label显示attributed text

1) 参考TTTAttributedLabel链接。其最好的第三方attributed Labeldisplay归功于text

2)为第三方参考OHAttributedLabelattributed Label

于 2012-10-29T13:22:31.743 回答
13

我正在使用 Xcode 9 和 iOS 11。使 UILabel 在其下方带有下划线。您可以同时使用 1. 使用代码 2. 使用 xib

使用代码:

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"I am iOS Developer"];
[attributeString addAttribute:NSUnderlineStyleAttributeName
                        value:[NSNumber numberWithInt:1]
                        range:(NSRange){0,[attributeString length]}];
lblAttributed.attributedText = attributeString;

使用 Xib: 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我们也可以使用 for 按钮。

于 2017-09-30T05:39:55.997 回答
5

设计师方式 - 高度可定制的版本

我个人更喜欢尽可能地定制我的设计。有时,您会发现使用内置的下划线工具并不容易自定义。

这是我的做法:

1首先,我为下划线创建一个 UIView。然后,您可以在 IB 中或以编程方式选择背景颜色。约束是这里的关键。

创建下划线视图

2然后,您可以根据需要自定义下划线。例如,要调整下划线的宽度以获得更好的视觉效果,请在 Interface Builder 中创建与约束的出口连接

在此处输入图像描述

3然后,您可以轻松地以编程方式自定义下划线视图。例如在这里,为了给你一个想法,我们将使下划线比标题“面包”宽 20 px:

var originalString: String = "Breads"
let myString: NSString = originalString as NSString
let size: CGSize = myString.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 14.0)])
self.widthUnderlineTitle.constant = size.width + 20

Results:

在此处输入图像描述

于 2016-12-04T03:19:59.177 回答
3

看看TTTAttributedLabel。如果您被允许使用 3d 方组件,只需在您需要的地方用 TTTAttributedLabel 替换您的 UILabel(直接替换)。适用于 iOS < 6.0!

于 2012-10-29T13:23:00.977 回答
2

UILabel 上的 Swift 扩展:

仍需改进,欢迎提出任何想法:

extension UILabel{

    func underLine(){    
        if let textUnwrapped = self.text{
            let underlineAttribute = [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]
            let underlineAttributedString = NSAttributedString(string: textUnwrapped, attributes: underlineAttribute)
            self.attributedText = underlineAttributedString   
        }   
    }
}

我现在能想到的一个缺点是每次文本更改时都需要调用它,并且没有实际的方法来关闭它......

于 2016-04-08T18:46:42.073 回答
0

斯威夫特 4.0

var attributeString = NSMutableAttributedString(string: "Hello Good Morning")
attributeString.addAttribute(NSUnderlineStyleAttributeName, value: 1, range: NSRange)
于 2017-11-10T10:55:05.853 回答
-1

斯威夫特 5

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: yourLabel.text ?? "")
attributeString.addAttribute(NSAttributedString.Key.underlineStyle, value: 1, range: NSMakeRange(0, attributeString.length))
yourLabel.attributedText = attributeString
于 2019-12-10T12:32:02.560 回答