知道当 UILabel 的多行属性打开时,它在哪里拆分字符串
Posted
技术标签:
【中文标题】知道当 UILabel 的多行属性打开时,它在哪里拆分字符串【英文标题】:Know where a UILabel splits a string when its multi-line property is on 【发布时间】:2013-01-09 10:38:52 【问题描述】:有一个问题,需要为 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];
这是我能得到的最接近的。
任何帮助将不胜感激。
【问题讨论】:
See this answer。它会给你一个UILabel
的行数组。
请通过此链接,这将对您有所帮助***.com/a/38146955/4940425
【参考方案1】:
试试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.
【讨论】:
我怀疑这被否决了,因为 lineBreakBeforeIndex 方法似乎仅适用于 OS X,并且问题被标记为 ios。对于 OS X 人来说,这里仍然是一个有用的答案:)【参考方案2】:您的第二个单词的长度大于行的长度(按钮的宽度),这就是发生这种情况的原因。
【讨论】:
【参考方案3】:粘贴连字符不是一个好主意。您应该在大小适合按钮宽度的部分上拆分字符串,如果需要,请使用而不是添加连字符
[String sizeWithFont:font constrainedToSize:Size lineBreakMode:LineBreakMode]
主要思想是获取初始字符串的一部分(如果断字,则添加连字符),检查其宽度是否适合按钮的宽度。如果宽度更小,尝试更大的部分,否则如果适合 - 处理更多部分
【讨论】:
这是我尝试过的一些事情,但没有得到准确的结果。错误大约是一个字符..【参考方案4】:请在此处查看我的答案,了解如何使用 NSParagraphStyle 和 NSAttributedString 来获得一个以连字符中断的 UILabel:https://***.com/a/19414663/196358
【讨论】:
以上是关于知道当 UILabel 的多行属性打开时,它在哪里拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个倒数计时器,当屏幕关闭时停止并“等待”,重新打开时恢复。安卓