知道UILabel在其多行属性打开时拆分字符串的位置

时间:2013-01-09 10:38:53

标签: iphone ios uibutton uilabel

有问题,需要为UIButton的标题指定一些文字。已将按钮换行模式设置为NSLineBreakByCharWrapping,以便字符串仅由每行末尾的字符分隔。但我需要在行的末尾插入连字符以显示单词的连续性。 继承人我试过的 -

    // Initialize the button

    titleButton.titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
    titleButton.titleLabel.backgroundColor = [UIColor yellowColor];
    [titleButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:15]];

    // Make the string here
    NSMutableString *titleString = [[NSMutableString alloc] initWithString:@"abcdefghijklmnopqrs tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"];
        // Insert hyphens 
        int titleLength = [titleString length];
        int hyphenIndex = 19;
        while (hyphenIndex<titleLength) { 
            UniChar charatIndex = [titleString characterAtIndex:hyphenIndex];
            if ((charatIndex - ' ') != 0) { // Check if its not a break bw two words
                [titleString insertString:@"-" atIndex:hyphenIndex]; // else insert an hyphen to  indicate word continuity
            }
            hyphenIndex += 19; //Since exactly 20 char are shown in single line of the button's label. 
        }
        //Set the hyphenated title for the button
        [titleButton setTitle:titleString forState:UIControlStateNormal];
        [titleString release];

这是我能得到的最接近的。

enter image description here

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

你的第二个单词的长度更多是行的长度(按钮的宽度),这就是为什么会发生这种情况。

答案 1 :(得分:0)

粘贴连字符并不是一个好主意。您应该使用大于适合按钮宽度的部分将字符串拆分,而不是根据需要添加连字符

[String sizeWithFont:font constrainedToSize:Size lineBreakMode:LineBreakMode]

主要思想是获取初始字符串的一部分(如果断字则添加连字符),检查其宽度是否适合按钮的宽度。如果宽度较小,请尝试更大的部分,否则,如果适合 - 处理更多部分

答案 2 :(得分:0)

尝试NSAttributedString

它为使用字符串提供了很好的可能性。

WWDC 2012-230

例如:

- (NSUInteger)lineBreakBeforeIndex:(NSUInteger)index withinRange:(NSRange)aRange
//Returns the appropriate line break when the character at the index won’t fit on the same line as the character at the beginning of the range.

答案 3 :(得分:0)

请参阅我的答案,了解如何使用NSParagraphStyle和NSAttributedString来获取用连字符打破的UILabel:https://stackoverflow.com/a/19414663/196358