我有两个UILabels
L1和L2。
我的代码,
NSString *s = @"Stringwithoutspacetext";
L1.text = s;
L2.text = @"2";
CGSize textSize = { 150, 21 };
CGRect textRect = [[NSString stringWithFormat:@"%@",s]
boundingRectWithSize:textSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}
context:nil];
L1.frame = CGRectMake(L1.frame.origin.x, L1.frame.origin.y, textRect.size.width, L1.frame.size.height);
L2.frame = CGRectMake(L1.frame.origin.x+textRect.size.width+10, L2.frame.origin.y, L2.frame.size.width, L2.frame.size.height);
当字符串s
中没有空格时,它可以正常工作。
如果字符串有一个空格,即。 s = @"String withspacetext";
输出如下所示,
如果字符串有两个空格,即。 s = @"String with spacetext";
输出如下所示,
为什么空格文字会影响我的代码?在上述条件下,我应该如何更改代码才能正常工作?
答案 0 :(得分:2)
找到解决方案!
我只是用临时字符串中的x替换空格来查找textrect的大小。
NSString *s = @"String with spacetext";
L1.text = s;
L2.text = @"2";
NSString *tempstring =[s stringByReplacingOccurrencesOfString:@" " withString:@"x"];
CGSize textSize = { 150, 21 };
CGRect textRect = [[NSString stringWithFormat:@"%@",tempstring]
boundingRectWithSize:textSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}
context:nil];
L1.frame = CGRectMake(L1.frame.origin.x, L1.frame.origin.y, textRect.size.width, L1.frame.size.height);
L2.frame = CGRectMake(L1.frame.origin.x+textRect.size.width+10, L2.frame.origin.y, L2.frame.size.width, L2.frame.size.height);
答案 1 :(得分:0)
这些标签是否在storyboard / XIB中创建?然后你应该关掉AutoLayout。
此外,numberOfLines
为0表示无限数行。这意味着自动换行,但由于标签的高度受限,未显示。自动换行使用不同长度的字符串解释现象:如果第二字太长,它将断开该行并显示...
以指示并非显示所有文本。
此外,adjustsFontSizeToWidth
并不总是有效,特别是如果标签的宽度不固定,这就是这种情况。
此外,最好根据字体计算textSize
,而不是硬编码。
此外,将字符串格式化为字符串的stringWithFormat
是多余的。
label1
虽然仍不理想,但优于L1
。