我希望自动调整文本并将其全部显示在一行上。我的问题是我不想要" ..."附在我的文字末尾。我怎么能摆脱这个?我的第一张图片是显示" ..."我想摆脱。第二张图显示了当我将cityLabel上的numberOfLines从0更改为1时会发生什么。我也不想要这样,因为我不想要多行(只需要一行)。
以下是代码:
UIView *view = [[UIView alloc] initWithFrame: CGRectMake (20, 0, self.view.frame.size.width-20, 90)];
UILabel *cityLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 5, self.view.frame.size.width-20, 55)];
UILabel *supportedCitiesLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 65, self.view.frame.size.width-20, 20)];
cityLabel.font = [UIFont boldSystemFontOfSize:50.0];
cityLabel.text = @"Dallas Dallas Dallas Dallas Dallas Dallas";
supportedCitiesLabel.text = @"Valley Test";
CGRect labelRect = cityLabel.frame;
cityLabel.adjustsFontSizeToFitWidth = NO;
cityLabel.numberOfLines = 1;
CGFloat fontSize = 50;
while(fontSize > 0.0)
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
NSDictionary *attrDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:fontSize], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil];
CGSize size = [cityLabel.text boundingRectWithSize:CGSizeMake(labelRect.size.width, 10000)
options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
attributes:attrDict context:nil].size;
if(size.height <= labelRect.size.height)
break;
fontSize -= 1.0;
}
cityLabel.font = [UIFont boldSystemFontOfSize:fontSize];
答案 0 :(得分:2)
设置[UILabel lineBreakMode]
。
<强>常量强>
NSLineBreakByWordWrapping
包装发生在单词上 边界,除非单词本身不适合单行。看到 字符串编程指南中的字符和字形集群 讨论与确定单词边界相关的问题。
适用于iOS 6.0及更高版本。
NSLineBreakByCharWrapping
包装 发生在第一个不适合的角色之前。
适用于iOS 6.0及更高版本。
NSLineBreakByClipping
线条很简单 没有经过文本容器的边缘。
适用于iOS 6.0及更高版本。
NSLineBreakByTruncatingHead
这条线 显示以使末端适合容器和缺失 该行开头的文本由省略号字形表示。 虽然此模式适用于多行文本,但它更常用于 单行文字。
适用于iOS 6.0及更高版本。
NSLineBreakByTruncatingTail
这条线 显示,以便开头适合容器和 行尾的缺少文本由省略号字形表示。 虽然此模式适用于多行文本,但它更常用于 单行文字。
适用于iOS 6.0及更高版本。
NSLineBreakByTruncatingMiddle
这条线 显示,以便开头和结尾适合容器和 中间缺少的文本由省略号字形表示。 虽然此模式适用于多行文本,但它更常用于 单行文字。
适用于iOS 6.0及更高版本。
答案 1 :(得分:0)
如果您希望文本自动调整大小以适应宽度,为什么设置cityLabel.adjustsFontSizeToFitWidth = NO;
我认为它应该设置为YES。
然后设置cityLabel.lineBreakMode = NSLineBreakByTruncatingTail
答案 2 :(得分:0)
尝试流动。
UIView *view = [[UIView alloc] initWithFrame: CGRectMake (0, 150, self.view.frame.size.width-20, 90)];
UILabel *cityLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 5, self.view.frame.size.width-20, 55)];
UILabel *supportedCitiesLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 65, self.view.frame.size.width-20, 20)];
cityLabel.font = [UIFont boldSystemFontOfSize:50.0];
cityLabel.text = @"Dallas Dallas Dallas Dallas Dallas Dallas";
supportedCitiesLabel.text = @"Valley Test";
CGRect labelRect = cityLabel.frame;
cityLabel.adjustsFontSizeToFitWidth = NO;
cityLabel.lineBreakMode = NSLineBreakByClipping;
cityLabel.numberOfLines = 1;
CGFloat fontSize = 50;
while(fontSize > 0.0)
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
paragraphStyle.lineBreakMode = NSLineBreakByClipping;
NSDictionary *attrDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:fontSize], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil];
CGSize size = [cityLabel.text boundingRectWithSize:CGSizeMake(labelRect.size.width, 10000)
options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
attributes:attrDict context:nil].size;
if(size.height <= labelRect.size.height)
break;
fontSize -= 1.0;
}
cityLabel.font = [UIFont boldSystemFontOfSize:fontSize];
// [self.view addSubview:view];
// [view addSubview:cityLabel];
// [view addSubview:supportedCitiesLabel];
答案 3 :(得分:0)