标签和文本字段仅在iOS6上使用特定字体剪裁的文本
我正在写一个应用程序,使用3种字体的2种语言的用户界面。对于希伯莱语用户界面和希伯莱语字体都是好的,但是对于英语用户界面,所有标签都在iOS6上用英语字体剪裁在底部(在7上就好了) 我开始调查,发现多行文字的行距太小,标签和文本字段仅在iOS6上使用特定字体剪裁的文本,ios,objective-c,fonts,uitextfield,uilabel,Ios,Objective C,Fonts,Uitextfield,Uilabel,我正在写一个应用程序,使用3种字体的2种语言的用户界面。对于希伯莱语用户界面和希伯莱语字体都是好的,但是对于英语用户界面,所有标签都在iOS6上用英语字体剪裁在底部(在7上就好了) 我开始调查,发现多行文字的行距太小,sizeToFit、sizeThatFits:和constrainToSize都给出了太小的字体高度,无法放入框架 首先,我尝试设置clipstobunds:NO,但没有任何效果,我想在使用英文字体时,硬代码会将帧放大*1.15,但1)我仍然存在行距问题,2)我无法使其与UITex
sizeToFit
、sizeThatFits:
和constrainToSize
都给出了太小的字体高度,无法放入框架
首先,我尝试设置clipstobunds:NO
,但没有任何效果,我想在使用英文字体时,硬代码会将帧放大*1.15
,但1)我仍然存在行距问题,2)我无法使其与UITextField
一起工作(由于某种原因,占位符和插入符号都被剪裁了,但键入的文本效果很好…-我尝试覆盖textRectForBounds:
和editingRectForBounds:
,并为UIEdgeInsets
返回给定的边界,但没有成功
我想编辑字体信息本身,但A我不知道怎么做(在谷歌上找不到任何信息),B找不到任何mac应用程序可以做(只有Windows的东西…)。而且-我需要这样做似乎很奇怪,因为在iOS7上它可以完美地工作,不需要调整任何帧。。。(我在iOS6和iOS7模拟器以及ios6iphone5设备和ios7iphone5设备上进行了测试…)
在iOS7上键入文本:
占位符iOS7:
在iOS6.1上键入文本:
iOS6.1上的占位符:
其他一些带有剪裁的UILabel的位置:
(这种情况发生在按钮上,但到处都会发生)
同样:这只发生在iOS6.1上,而不是在7上,我猜这与SDK从字体文件中读取字体大小(以像素为单位)的方式有关,该字体文件可能已从iOS6更改为7
编辑:这是我针对UITextField问题所做的变通试用:
- (CGRect) textRectForBounds:(CGRect)bounds {
return [self UIEdgeInsetsInsetRectForTextFieldBounds:bounds];
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
return [self UIEdgeInsetsInsetRectForTextFieldBounds:bounds];
}
- (CGRect)UIEdgeInsetsInsetRectForTextFieldBounds:(CGRect)bounds {
bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height + 5);
return UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(-2, 10, -2, 10));
}
注意:它写在UITextField
类别上。我知道这不是办法,但它确实改变了插入,所以我知道代码发生了变化并产生了影响,它只是没有像预期的那样改变占位符的场大小
没用。。。
此外,这些都是我在实际计算所需空间的情况下修复标签所做的尝试,从注释标记可以看出,我最终使用了一种硬编码的解决方法:
(最后一段评论是我试图解决行距问题,但也没有成功)
**
changeFrame…
是为UIView构建的一个类别,用于更改特定值,而无需使用setFrame:CGRectMake(…
*为什么不根据您使用的文本和字体计算文本大小
CGSize titleSize = [title sizeWithFont:<your font here> constrainedToSize:<button size > lineBreakMode:NSLineBreakByTruncatingTail];
CGSize titleSize=[标题大小WithFont:constrainedToSize:lineBreakMode:NSLineBreakByTruncingTail];
然后可以相应地更改占位符的大小
注意,ios 7.0中不推荐使用此函数。
对于ios7,您需要使用:
boundingRectWithSize:options:attributes:context:
我这样做了,它不起作用,请参见我的第二段……我一直得到CGSize.height,它太小了,无法包含文本,我尝试过剪切它……苹果的所有自动计算方法都返回了太小的高度。我还尝试过断点此时,大小计算line-font设置为正确的。请检查标签的lineBreakMode。如果您使用的是nib文件,请验证lineBreakMode在这两个位置是否相同。我已经用我尝试过的代码片段编辑了我的问题,希望它能让我的情况更清楚一点。
CGSize titleSize = [title sizeWithFont:<your font here> constrainedToSize:<button size > lineBreakMode:NSLineBreakByTruncatingTail];