我需要在iphone应用程序中将单词居中放置在UILabel中。我有一串文字太长而不适合标签,所以我想将标签放在特定的单词上并截断两端。例如:这是一个例句。 “大家好,我被困在一个UILabel的长句中。”我想以“卡住”一词为中心,以便UILabel看起来像这样,“......我是卡住试图......”。我发现一个问题的链接有同样的问题,但我无法得到答案为我工作。我对这种编程非常新,所以任何进一步的帮助将非常感谢!提前致谢。这里是另一个问题的链接:iOS: Algorithm to center a word in a sentence inside of a UILabel在UILabel中居中词的算法
1
A
回答
3
我刚刚编码并运行此(但没有测试任何边缘情况下)。这个想法是围绕这个单词做一个NSRange以居中,然后在每个方向上对称地扩展这个范围,同时测试截断字符串的像素宽度与标签的宽度。
- (void)centerTextInLabel:(UILabel *)label aroundWord:(NSString *)word inString:(NSString *)string {
// do nothing if the word isn't in the string
//
NSRange truncatedRange = [string rangeOfString:word];
if (truncatedRange.location == NSNotFound) {
return;
}
NSString *truncatedString = [string substringWithRange:truncatedRange];
// grow the size of the truncated range symmetrically around the word
// stop when the truncated string length (plus ellipses ... on either end) is wider than the label
// or stop when we run off either edge of the string
//
CGSize size = [truncatedString sizeWithFont:label.font];
CGSize ellipsesSize = [@"......" sizeWithFont:label.font]; // three dots on each side
CGFloat maxWidth = label.bounds.size.width - ellipsesSize.width;
while (truncatedRange.location != 0 &&
truncatedRange.location + truncatedRange.length + 1 < string.length &&
size.width < maxWidth) {
truncatedRange.location -= 1;
truncatedRange.length += 2; // move the length by 2 because we backed up the loc
truncatedString = [string substringWithRange:truncatedRange];
size = [truncatedString sizeWithFont:label.font];
}
NSString *ellipticalString = [NSString stringWithFormat:@"...%@...", truncatedString];
label.textAlignment = UITextAlignmentCenter; // this can go someplace else
label.text = ellipticalString;
}
,并调用它是这样的:
[self centerTextInLabel:self.label aroundWord:@"good" inString:@"Now is the time for all good men to come to the aid of their country"];
如果你认为这是一个门将,你可以将其更改为上的UILabel一类方法。
0
建议:使用两个标签,一个左对齐,一个右对齐。两者应在“外部”(可见)标签边界外部截断,并排放置。分配你的中心词构成两者之间的过渡。
以这种方式,你不会得到完美的居中(它会随着中心词的长度而变化),但它会接近它。
相关问题
- 1. UILabel不居中
- 2. 居中UILabel无法正常工作?
- 3. 如何在UIToolbar中居中UILabel
- 4. 在UILabel中垂直居中文本
- 5. 在UITableViewCell中水平居中两个UILabel
- 6. 为什么我的UILabel不居中?
- 7. Java中的邻居加入算法
- 8. 在UILabel/UITextView中获取单词
- 9. 如何在UILabel中使用该单词
- 10. 如何布置UILabel和UIButton并居中?
- 11. 基于关键词的最近邻居算法或库
- 12. UILabel中的可点击单词
- 13. 无法将我的UILabel居中在我的自定义视图上
- 14. UILabel和UIActivityIndicatorView居中在UITableView的可见区域
- 15. 如何将UIImage和UILabel水平居中在一起?
- 16. 邻居搜索算法
- 17. 最近邻居算法
- 18. 邻居数KNN算法
- 19. 动态计算UITableViewCell中的UILabel宽度
- 20. 重写UILabel setText:在Swift中的方法
- 21. 谓词STL算法
- 22. 的UILabel与尾随空格不正确居中
- 23. 确定使用adjustFontSizeToFitWidth时居中的UILabel高度
- 24. 计算python中boids的邻居
- 25. 将UILabel居中放置在高度动态的UITableViewCell中的最佳方法是什么?
- 26. 划分区域的算法使每个给定点在其图中居中
- 27. 无法在HTML/CSS中居中文本
- 28. 无法将jdialog居中在jframe中
- 29. 无法在引导行中居中div
- 30. 在VB.NET中计算词频的最佳方法是什么?
我必须说,这是一个很好的开始。 – CodaFi 2012-04-26 04:36:02
非常好,但是'while'循环不会扩展字符串,直到它超出标签的宽度,然后使用那个稍微太长的字符串?缓存比标签还要短的最长的已知字符串会更好吗?它可能仍然有效,因为'UILabel'可以稍微缩小它的内容以保持一切都在视图中,但这似乎不可靠。或者,也许标签决定它太长,削减省略号,然后添加自己的... – Dondragmer 2012-04-26 04:41:59
是的 - 前卫的案件。可以稍微降低最大宽度阈值。不确定提问者是否可以使用1pt字体自动调整大小。另一个问题是:在宽度可变的字体中,我们可能会扩大范围以围绕不同宽度的每个大小的字符。这里再一次,我们应该适合,但不是像素完美。 – danh 2012-04-26 05:03:48