真的与NSAttributedString关闭线?

时间:2013-10-24 00:35:19

标签: ios objective-c uibutton uilabel nsattributedstring

我希望两行文本在按钮上显得非常接近(小行间距)。我有以下代码:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"50 WPM"];

NSMutableParagraphStyle *paragrapStyle = [[NSMutableParagraphStyle alloc] init];
paragrapStyle.alignment = NSTextAlignmentCenter;
paragrapStyle.lineSpacing = -10;

[string addAttribute:NSParagraphStyleAttributeName value:paragrapStyle range:NSMakeRange(0, string.length)];

UIFont *font1 = [UIFont systemFontOfSize:22.0];
[string addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0, string.length - 4)];

UIFont *font = [UIFont systemFontOfSize:15.0];
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(string.length - 3, 3)];

[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, string.length)];

[self.button setAttributedTitle:string forState:UIControlStateNormal];

但是由于行间距不能为负,所以它并没有像我希望的那样接近。它看起来像这样:

enter image description here

有没有办法让他们更接近?

5 个答案:

答案 0 :(得分:56)

如果你有一个属性字符串,那么一切都应该可行。 :)你只需看一下。

- (void)setMinimumLineHeight:(CGFloat)aFloat
- (void)setMaximumLineHeight:(CGFloat)aFloat

尝试

[paragraphStyle setLineSpacing:0.0f];
[paragraphStyle setMaximumLineHeight:7.0f];

您将意识到maximumLineHeight不是maximumLineSpacing。 ^^

例如,使用setMaximumLineHeight:12];

enter image description here

答案 1 :(得分:0)

我建议阅读iOS7中引入的TextKit。我没有太多的经验,但我知道它在归结你的文本方面给了你很多可能性。

答案 2 :(得分:0)

在Swift 3中,您可以通过以下方式实现此目的:

let paragraph = NSMutableParagraphStyle()
paragraph.lineSpacing = 0
paragraph.maximumLineHeight = 20.

保持lineSpacing = 0.您可以调整maximumLineHeight以使其更近或增加间距。

答案 3 :(得分:0)

这里有一个Swift3的小扩展,支持负线间距

extension UILabel {
    func set(lineSpacing: CGFloat, textAlignment: NSTextAlignment = NSTextAlignment.center) {
        if let text = self.text {
            let paragraphStyle = NSMutableParagraphStyle()
            if lineSpacing < 0 {
                paragraphStyle.lineSpacing = 0
                paragraphStyle.maximumLineHeight = self.font.pointSize + lineSpacing
            } else {
                paragraphStyle.lineSpacing = lineSpacing
            }
            let attrString = NSMutableAttributedString(string: text)
            attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
            self.attributedText = attrString
            self.textAlignment = textAlignment
        }
    }
}

答案 4 :(得分:-1)

如何对UIButton进行子类化,并将2 UILabels添加到靠近的按钮视图中。为标签创建属性并设置适当的:

CustomButton *btn = [CustomButton new];

btn.textLine1 = @"Top";
btn.textLine2 = @"Bottom";

这样做的唯一问题是当状态改变时你将需要处理文本颜色。