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。
您可以设置足够大的默认字体大小,让控件缩小文本以适应宽度。实际字体大小会介于 minimumFontSize
和 font
.
的大小设置之间
我认为你的设置有误。默认情况下,当您在 UITextField
上键入时,它将使光标在最后输入的字符处保持可见,就像您提供的第一个示例一样,但字体大小没有变化。仅当您将 adjustsFontSizeToFitWidth
设置为 YES 时才会发生收缩行为。尝试删除 minimumFontSize
和 adjustsFontSizeToFitWidth
设置。
与 UILabel 类似,UITextField 有一个 属性
"adjustsFontSizeToFitWidth"
您可以尝试将此设置为 YES
我想要一个 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。
您可以设置足够大的默认字体大小,让控件缩小文本以适应宽度。实际字体大小会介于 minimumFontSize
和 font
.
我认为你的设置有误。默认情况下,当您在 UITextField
上键入时,它将使光标在最后输入的字符处保持可见,就像您提供的第一个示例一样,但字体大小没有变化。仅当您将 adjustsFontSizeToFitWidth
设置为 YES 时才会发生收缩行为。尝试删除 minimumFontSize
和 adjustsFontSizeToFitWidth
设置。
与 UILabel 类似,UITextField 有一个 属性 "adjustsFontSizeToFitWidth" 您可以尝试将此设置为 YES