Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标签和文本字段仅在iOS6上使用特定字体剪裁的文本_Ios_Objective C_Fonts_Uitextfield_Uilabel - Fatal编程技术网

标签和文本字段仅在iOS6上使用特定字体剪裁的文本

标签和文本字段仅在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

我正在写一个应用程序,使用3种字体的2种语言的用户界面。对于希伯莱语用户界面和希伯莱语字体都是好的,但是对于英语用户界面,所有标签都在iOS6上用英语字体剪裁在底部(在7上就好了)

我开始调查,发现多行文字的行距太小,
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];