【问题标题】:How to set UITextField height?如何设置 UITextField 高度?
【发布时间】:2012-01-28 07:39:09
【问题描述】:

我正在使用UITextField。我想增加它的高度,但我还没有找到任何属性来做到这一点。我怎样才能做到这一点?

【问题讨论】:

    标签: iphone ios xcode uitextfield


    【解决方案1】:

    您不能更改圆角矩形边框样式的高度。 要设置高度,只需在 Xcode 中选择圆形边框以外的任何边框样式:

    【讨论】:

    • 刚刚用 10.0(或任何)修改了 setCornerRadius,你又得到了带有边框样式但具有自定义高度的 UItextField :)
    • 更好的方法是borderStyle = UITextBorderStyleRoundedRect;
    • 为什么不可能?
    【解决方案2】:

    我终于找到了解决方法!

    正如我们所发现的,IB 不允许我们更改圆角边框样式的高度。因此,将其更改为任何其他样式并设置所需的高度。在代码中将边框样式改回来。

    textField.borderStyle = UITextBorderStyleRoundedRect;
    

    【讨论】:

    • 好技巧,但是你怎么能允许文本的多行显示呢?
    • @Lucien - 那不是 TextArea 而不是文本字段
    • 我更喜欢这个,因为我仍然可以使用设计器。
    • 确保这是在viewWillLayoutSubviews 内完成的。我在 leftView 的文本字段和一些文本中添加了一张图片,当在 viewDidLoad 中完成此操作时,它们都奇怪地拉伸了。
    • 对于 Swift 3.0 使用 textField.borderStyle = .RoundedRect
    【解决方案3】:
    CGRect frameRect = textField.frame;
    frameRect.size.height = 100; // <-- Specify the height you want here.
    textField.frame = frameRect;
    

    【讨论】:

    • 打开 .xib 作为源代码更容易找到你的 IBUITextField 并更改 属性
    • 我试过了,但它对我没有任何作用。你把这些线放在哪里?我把它放在 initWithNibName 方法中。
    • 应该在 viewDidLoad 或 ViewWillAppear / viewDidApper 中
    • UITextField 的默认高度是 31,适用于任何以编程方式添加并希望它具有默认高度的人
    • @HotJard 我建议不要在情节提要源代码中进行黑客攻击,它往往会重置它的一些值。例如,当您像这样设置文本字段的高度,并在视图中添加一个按钮并编辑按钮的文本大小时,视图中的文本字段将跳回到它们的默认高度。
    【解决方案4】:

    如果您使用自动布局,那么您可以在故事板上进行。

    向文本字段添加高度约束,然后将高度约束常量更改为任何所需值。步骤如下:

    第 1 步:为文本字段创建高度限制

    第 2 步:选择高度约束

    第 3 步:更改高度约束的常量值

    【讨论】:

    • 它有效,但我收到了这个新警告,任何想法:“圆形文本字段”的位置不明确
    • 如果它说 Position is ambiguous,那么这意味着您可能没有约束来定位 UITextField 对象。您可以尝试添加一个约束来定义 x 和 y。例如,您可以添加前导空间约束(对于 x),并且您可以从顶部添加垂直空间约束。
    • stackoverflow.com/questions/21295136/… 当我这样做时,我添加了一个打印屏幕
    • 为您使用的字体找到正确的高度限制的提示:将borderStyle 设置为圆角的任何值。使用Editor -&gt; Size to Fit Content 让布局做它的事情。使用UITextField 上的属性检查器检查其高度。使用它来设置您的高度限制,现在您可以将borderStyle 改回圆形。
    • 我可以以编程方式进行吗?
    【解决方案5】:

    1.) 在 InterfaceBuilder 中更改边框样式。

    2.) 之后您可以更改大小。

    3.) 为您的 TextField 创建一个 IBOutlet 并将以下代码输入到您的 viewDidLoad() 以将 BorderStyle 改回。

    textField.borderStyle = UITextBorderStyleRoundedRect;
    

    斯威夫特 3:

    textField.borderStyle = UITextBorderStyle.roundedRect
    

    【讨论】:

    • 感谢@David Seek
    【解决方案6】:
    1. 选择边框样式为非圆角

    1. 设置你的身高

    在您看来WillAppear 将角设置为圆形

    yourUITextField.borderStyle = UITextBorderStyleRoundedRect;
    

    1. 享受你又圆又高的 UITextField

    【讨论】:

    • 太棒了!!它帮助了我。
    • 这太棒了,它有助于我不得不使用 swift 3/4,...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
    • 改为 UITextField.BorderStyle.roundedRect
    【解决方案7】:

    按照这两个简单的步骤,增加您的UItextField 的高度。

    第一步:右击XIB文件,像“源代码”一样打开。

    第 2 步:找到相同的 UITextfield 源并根据需要设置框架。

    您可以使用这些步骤来更改任何苹果控件的框架。

    【讨论】:

    • 有趣但这是最好的方法:)
    • 当您考虑其他程序员试图找到设置高度的位置时,这不是最好的方法
    • 这听起来是个糟糕的主意。您应该将 XIB 源视为私有 api。在 Xcode 的未来版本中,它可能会从你下面改变。更不用说你把你的定制隐藏在任何理智的人将来会寻找它的最后一个地方。
    【解决方案8】:

    iOS 6 的更新:使用自动布局,即使您仍然无法从 Interface Builder 中的 Size Inspector 设置 UITextField 的高度(至少从 Xcode 4.5 DP4 开始),现在可以设置它的高度限制,您可以从 Interface Builder 编辑它。

    此外,如果您通过代码设置框架的高度,则自动布局可能会根据您的视图可能具有的其他约束来重置它。

    【讨论】:

    • 这就是我要找的...但是如何设置高度约束,以便它根据 UITextField 的内容动态扩展高度?
    • func updateTextFields() { if #available(iOS 11, *) { } else { nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits(CGSize(width: 1000, height: 500) ).height nameTextField.borderStyle = .roundedRect } } 我希望我的roundBorder textFields 根据我设置的自适应字体来调整它们的高度。这在 iOS 11 上开箱即用,但在 iOS 9,10 上根本不起作用。我使用以下代码:
    【解决方案9】:

    我知道这是一个老问题,但我只是想补充一下,如果您想从 IB 内部轻松更改 UITextField 的高度,然后只需将该 UITextfield 的边框类型更改为默认圆角类型以外的任何内容。然后,您可以从编辑器内部轻松拉伸或更改高度属性。

    【讨论】:

      【解决方案10】:

      swift3

      @IBDesignable
      class BigTextField: UITextField {
          override func didMoveToWindow() {
              super.didMoveToWindow()
              if window != nil {
                  borderStyle = .roundedRect
              }
          }
      }
      

      界面生成器

      • UITextField 替换为BigTextField
      • 更改Border Stylenone

      【讨论】:

      • 这是迄今为止最好的解决方案。
      【解决方案11】:

      我对这个愚蠢问题的可悲贡献。在 IB 中将样式设置为 none,以便您可以设置高度,然后在 IB 中将类设置为 UITextField 的子类,强制样式为圆角矩形。

      @interface JLTForcedRoundedRectTextField : UITextField
      @end
      
      @implementation JLTForcedRoundedRectTextField
      - (void)awakeFromNib
      {
          self.borderStyle = UITextBorderStyleRoundedRect;
      }
      @end
      

      它让我不必破解 XIB 文件或将样式代码写入我的视图控制器。

      【讨论】:

        【解决方案12】:

        UITextField 的高度仅在 Attributes Inspector 中不可调整 当它具有默认的圆角边框样式时,但添加了 高度约束(加上需要的任何其他约束 满足自动布局系统 - 通常只需使用 Add Missing 约束),调整约束将调整 文本字段的高度。如果你不想要约束,约束可以 被删除(清除约束)并且文本字段将保留在 调整高度。

        像魅力一样工作。

        【讨论】:

          【解决方案13】:

          在 Swift 3 中使用:

          yourTextField.frame.size.height = 30
          

          【讨论】:

            【解决方案14】:

            试试这个

            UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 280, 120)];
            

            【讨论】:

              【解决方案15】:
              UITextField *txt = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
                  [txt setText:@"Ananth"];
                  [self.view addSubview:txt];
              

              最后两个参数是宽度和高度,你可以随意设置...

              【讨论】:

                【解决方案16】:

                你可以使用 textfield 的 frame 属性来改变 frame Like-Textfield.frame=CGRECTMake(x轴,y轴,宽度,高度)

                【讨论】:

                  【解决方案17】:

                  这很简单。

                  yourtextfield.frame = CGRectMake (yourXAxis, yourYAxis, yourWidth, yourHeight);
                  

                  将您的文本字段声明为全局属性,并在您的代码中任意更改其框架。

                  编码愉快!

                  【讨论】:

                  • 这是一个危险且过时的答案。使用全局变量是一种糟糕的做法,因为它会比视图寿命更长,并且硬编码大小无法很好地适应灵活的布局。
                  【解决方案18】:

                  如果您要创建大量 UITextFields,则可以更快地将 UITextViews 子类化并使用

                  覆盖 setFrame 方法
                  -(void)setFrame:(CGRect)frame{
                      [self setBorderStyle:UITextBorderStyleRoundedRect];
                      [super setFrame:frame];
                      [self setBorderStyle:UITextBorderStyleNone];
                  }  
                  

                  这样你就可以打电话
                  [customTextField setFrame:&lt;rect&gt;];

                  【讨论】:

                    【解决方案19】:

                    我遇到了同样的问题。在这里尝试了一些解决方案,而不是做所有这些笨拙的事情。我发现只设置高度约束就足够了。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-08-23
                      • 2011-01-18
                      • 1970-01-01
                      • 2011-02-01
                      • 2012-03-01
                      • 2011-01-09
                      相关资源
                      最近更新 更多