UITextField没有正确显示超出范围的文本

时间:2015-01-02 21:21:58

标签: ios objective-c cocoa-touch uitextfield

我希望UITextField具有相同的行为,使用相同的fontsize:

enter image description here

但是当我输入与min fontsize相同的original fontsize时,我得到了这种行为:

enter image description here

导致此行为的原因是什么?如何解决?

我不想调整字体大小。因此,调整字体大小不会起作用

4 个答案:

答案 0 :(得分:1)

我认为你的设置有误。默认情况下,当您在UITextField上键入时,它会在最后输入的字符处显示光标,这是您提供的第一个示例,但不会更改字体大小。仅当您将adjustsFontSizeToFitWidth设置为YES时,才会出现收缩行为。请尝试删除minimumFontSizeadjustsFontSizeToFitWidth设置。

答案 1 :(得分:0)

好问题。 AFAIK,它无法完成。但是,您可以编写自己的自定义控件来执行此操作。我首先在顶部放一个标签,然后用键盘输入来设置标签的内容。

这是应该做的诀窍的代码。您需要将标签放在另一个视图中,以便在调整文本时剪切文本。

- (IBAction)field1_editing_changed:(id)sender {
NSString *text = self.field1.text;


NSAttributedString *attributedText =
[[NSAttributedString alloc]
 initWithString:text
 attributes:@{NSFontAttributeName:self.field1.font}];

CGRect rect = [attributedText boundingRectWithSize:(CGSize){CGFLOAT_MAX, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

CGFloat padding = 5;
CGFloat width = rect.size.width;
width += 2*padding;
CGRect frame = self.field1.frame;
if (width > frame.size.width)
    frame.origin.x -= width - frame.size.width;

frame.origin.y += 30; // I added this so you could see the label appear below the field (for testing only)
frame.origin.x += padding;
frame.size.width = width;
NSLog(@"%g, %g, %g, %g", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
self.label1.frame = frame;
self.label1.text = self.field1.text;
self.label1.font = self.field1.font;

}

答案 2 :(得分:0)

UITextField有一个属性adjustsFontSizeToFitWidth,请参阅UITextField Class Reference

您可以设置足够大的默认字体大小,让控件缩小文本以适应宽度。实际字体大小介于minimumFontSizefont的大小设置之间。

答案 3 :(得分:0)

与UILabel类似,UITextField有一个属性 "#adjustsFontSizeToFitWidth 34; 您可以尝试将此设置为YES