如何设置UITextField的高度?

133

我正在使用UITextField。 我想增加它的高度,但我没有找到任何属性来实现这一点。 我该如何做到这一点?

我正在使用UITextField。我想增加其高度,但是我没有发现可以实现此功能的属性。 我该如何达到这个目的?

19个回答

217

您无法更改圆角矩形边框样式的高度。

要设置高度,请在Xcode中选择任何非圆角边框样式:

输入图像描述


刚刚将setCornerRadius修改为10.0(或其他值),你就可以再次获得带有自定义高度的UItextField,但边框样式不变 :) - Beto
1
一种更好的方法是使用borderStyle = UITextBorderStyleRoundedRect; - Deprecated Darren
为什么不可能呢? - apex39

151

我终于找到解决方法了!

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

textField.borderStyle = UITextBorderStyleRoundedRect;

不错的技巧,但是如何允许文本的多行呈现? - Lucien
7
@Lucien - 这不应该是一个文本框,而应该是一个文本区域。 - Craig
我更喜欢这个,因为我仍然可以使用设计师。 - RiddlerDev
确保这些操作在 viewWillLayoutSubviews 方法中执行。我向文本字段的 leftView 中添加了一张图片和一些文字,如果这些操作在 viewDidLoad 中完成,则它们会出现奇怪的拉伸。 - user5936834
对于 Swift 3.0,请使用 textField.borderStyle = .RoundedRect - Geoherna
@Geoherna:textField.borderStyle = .roundedRect@Geoherna:textField.borderStyle = .roundedRect - RJB

90
CGRect frameRect = textField.frame;
frameRect.size.height = 100; // <-- Specify the height you want here.
textField.frame = frameRect;

4
打开.xib文件并将其作为源代码查看,找到您的IBUITextField并更改<string key="NSFrame">属性,这样做要容易得多。 - HotJard
我尝试过了,但对我没有任何作用。你把这些行放在哪里?我把它放在initWithNibName方法中。 - janex
应该在viewDidLoad或ViewWillAppear / viewDidAppear中。 - Manjunath
2
UITextField的默认高度为31,如果任何人希望通过编程添加一个UITextField并使其具有默认高度,则需要进行调整。 - sam_smith
3
我建议不要在Storyboard源代码中进行修改,因为它会重置一些值。例如,当您像那样设置文本字段高度,并在视图中添加一个按钮并编辑按钮的文本大小时,视图中的文本字段将跳回其默认高度。 - Kevin
使用上述代码对我很有效,但必须关闭自动布局才能使其正常工作。 - Carter S.

85
如果您正在使用自动布局,可以在故事板上进行以下操作。向文本字段添加高度约束,然后更改高度约束常量为所需值即可。步骤如下:
第1步:为文本字段创建高度约束 enter image description here 第2步:选择高度约束 enter image description here 第3步:更改高度约束的常量值 enter image description here

它可以工作,但我收到了这个新的警告,有什么想法吗: “圆形样式文本字段”的位置不明确。 - Esqarrouth
如果出现“位置不明确”的提示,则意味着您可能没有对UITextField对象进行定位的约束条件。您可以尝试添加一个约束条件来定义x和y。例如,您可以添加前导空间约束(用于x),并且可以从顶部添加垂直空间约束。 - user1046037
当我这样做时,我添加了一个截图。 - Esqarrouth
一个寻找正确字体高度约束的提示:将 borderStyle 设置为除了圆角之外的任何值。使用 Editor -> Size to Fit Content 让布局自动完成。使用 UITextField 的属性检查器来检查其高度。使用此高度设置您的高度约束,现在您可以将 borderStyle 更改回圆角。 - Benjohn
我能否通过编程来完成它? - LKM
当然可以。只需添加一个明确的高度约束即可。 - user1046037

31

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

enter image description here

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

enter image description here

3.) 创建一个IBOutlet到您的TextField,并在viewDidLoad()中输入以下代码来更改BorderStyle。

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

1
感谢 @David Seek - Vinoth Vino

29
  1. 选择非圆角边框样式

enter image description here

  1. 设置高度

enter image description here

在viewWillAppear中将角落设为圆形

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

输入图像描述

  1. 享受您的高而圆的UITextField。

太棒了!!它帮助了我。 - Augustine P A
1
这很棒,它对我需要使用的Swift 3/4有所帮助......yourTextField.borderStyle = UITextBorderStyle.roundedRect。 - Tony Merritt
1
它已更改为UITextField.BorderStyle.roundedRect。 - smj

11

跟随这两个简单的步骤,可以增加您的 UITextField 的高度。

步骤 1: 右键点击 XIB 文件并在 "源代码" 中打开。

步骤 2: 找到相同的 UITextfield 源,并将其框架设置为所需大小。

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


1
有趣但这是最好的方法 :) - VisioN
4
考虑到其他程序员试图查找“height”属性被设置的位置,这不是最佳做法。 - bucherland
1
这听起来像是一个糟糕的想法。你应该将XIB源视为私有API。它可能会在未来的Xcode版本中发生变化。更不用说你已经将自定义内容隐藏在任何理智人未来都不会去寻找的地方了。 - Michael Peterson

8
一个iOS 6的更新:使用自动布局,即使在界面构建器中仍然无法从“尺寸检查器”中设置UITextField的高度(至少在Xcode 4.5 DP4中),但现在可以在其上设置高度约束并可从界面构建器中进行编辑。
此外,如果您通过代码设置框架的高度,自动布局可能会根据视图可能具有的其他约束条件进行重置。

1
这正是我所寻找的...但是我该如何设置高度约束,以便根据UITextField的内容动态扩展高度? - jbandi
func updateTextFields() { if #available(iOS 11, *) { } else { nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits(CGSize(width: 1000, height: 500)).height nameTextField.borderStyle = .roundedRect } } 我希望我的圆角边框文本框根据我设置的自适应字体调整其高度。这在iOS 11上可以直接使用,但在iOS 9、10上完全不起作用。我使用以下代码: - PhoneyDeveloper

6

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


4

swift3

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

界面生成器

  • UITextField替换为BigTextField
  • Border Style更改为none

这是迄今为止最好的解决方案。 - ilovebigmacs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接