【问题标题】:UITextField does not show text out of bounds correctlyUITextField 无法正确显示越界文本
【发布时间】:2015-03-01 04:07:29
【问题描述】:

我想要一个UITextField,它具有这样的行为,具有相同的字体大小:

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

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

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

【问题讨论】:

  • 有人愿意解释否决票吗?
  • 投反对票可能是因为没有任何额外设置的标准 UITextField 完全符合您的要求:滚动文本而不调整字体大小。

标签: ios objective-c cocoa-touch uitextfield


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    }

    【讨论】:

    • 我为什么不关心滚动文本?这就是全部技巧吧?
    • 对不起。我误解了。相同的技巧将适用,但您必须调整标签大小并使其被视图剪裁。我正在尝试一些代码,看看我能不能让它工作。
    • BTW - 如果您使用较小的字体,它似乎可以工作。但是,如果您想要更大的字体,那么上面的代码示例应该可以解决问题。如果您愿意,所有这些都可以包含在一个自己的类中。当我想在应用程序中使用类似的功能时,我一直在扩展 UIButtons。
    【解决方案3】:

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

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

    【讨论】:

    • 问题是我不希望字体缩小,但我想滚动用户正在输入的文本。
    【解决方案4】:

    和UILable类似,UITextField有一个属性 “调整FontSizeToFitWidth” 您可以尝试将其设置为 YES

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多