UITextField 无法正确显示超出范围的文本

UITextField does not show text out of bounds correctly

我想要一个 UITextField 具有与此相同的字体大小的行为:

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

是什么导致了这种行为,我该如何解决?

我不想调整字体大小。所以调整字体大小不会起作用

好问题。 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;

}

UITextField 有一个 属性 adjustsFontSizeToFitWidth,参见 UITextField Class Reference

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

的大小设置之间

我认为你的设置有误。默认情况下,当您在 UITextField 上键入时,它将使光标在最后输入的字符处保持可见,就像您提供的第一个示例一样,但字体大小没有变化。仅当您将 adjustsFontSizeToFitWidth 设置为 YES 时才会发生收缩行为。尝试删除 minimumFontSizeadjustsFontSizeToFitWidth 设置。

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