如何设置UITextField的高度?


130

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

Answers:


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

4
打开.xib作为源代码,找到IBUITextField并更改<string key =“ NSFrame”>属性,要容易得多
HotJard 2013年

我尝试过,但是对我没有任何帮助。你把这些线放在哪里?我将其放在initWithNibName方法中。
janex

它应该在viewDidLoad或ViewWillAppear / viewDidApper中
Manjunath

2
UITextField的默认高度为31,对于以编程方式添加一个并且想要其为默认高度的任何人
simon_smiley 2014年

2
@HotJard我建议不要在情节提要源中进行黑客攻击,因为它倾向于重置某些值。例如,当您这样设置文本框高度,并向视图中添加按钮并编辑按钮的文本大小时,视图中的文本框将跳回到其默认高度。
凯文(Kevin)

212

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

在此处输入图片说明


只需将setCornerRadius修改为10.0(或任何其他值),您会再次获得带有边框样式但具有自定义高度的UItextField :)
Beto

1
更好的方法是borderStyle = UITextBorderStyleRoundedRect;
弃用了达伦(Darren)2015年

为什么不可能呢?
apex39 '19

151

我终于找到了解决办法!

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

textField.borderStyle = UITextBorderStyleRoundedRect;

很好的技巧,但是您如何允许多行显示文本?
Lucien 2013年

7
@Lucien-那不是TextArea而不是Textfield –
Craig

我更喜欢这个,因为我仍然可以使用设计师。
RiddlerDev 2014年

确保在内部完成此操作viewWillLayoutSubviews。我在leftViewtextfield 的图像和一些文本中添加了一个图像,当viewDidLoad它们完成后,它们都怪异地拉伸了。

对于Swift 3.0使用textField.borderStyle = .RoundedRect
Geoherna '16

85

如果您使用的是“自动布局”,则可以在“故事”板上进行。

将高度限制添加到文本字段,然后将高度限制常数更改为任何所需的值。步骤如下所示:

步骤1:为文本字段创建高度约束

在此处输入图片说明

第2步:选择高度约束

在此处输入图片说明

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

在此处输入图片说明


它起作用了,但是我得到了这个新警告,任何想法:“圆形文本字段”的位置不明确
Esqarrouth 2014年

如果说Position不明确,则意味着您可能没有位置限制UITextField对象。您可以尝试添加约束来定义x和y吗?例如,您可以添加前导空间约束(用于x),并且可以从顶部添加垂直空间约束。
user1046037 2014年

stackoverflow.com/questions/21295136/… 当我这样做时,我添加了打印屏幕
Esqarrouth 2014年

为您使用的字体找到正确的高度限制的提示:设置borderStyle四舍五入以外的任何值。用于Editor -> Size to Fit Content使布局发挥作用。使用属性检查器UITextField检查其高度。使用此设置您的高度约束,现在您可以将其更改borderStyle为四舍五入了。
约翰2015年

我可以通过编程方式进行吗?
LKM

30

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

在此处输入图片说明

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

在此处输入图片说明

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

textField.borderStyle = UITextBorderStyleRoundedRect;

斯威夫特3:

textField.borderStyle = UITextBorderStyle.roundedRect

感谢@David Seek
Vinoth Vino

29
  1. 选择不四舍五入的边框样式

在此处输入图片说明

  1. 设定身高

在此处输入图片说明

在您的视图中,WillAppear将角设置为圆角

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

在此处输入图片说明

  1. 享受你又高又圆的UITextField

大!!它帮助了我。
奥古斯丁PA

1
太好了,它帮助我快速使用了3/4,... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
它更改为UITextField.BorderStyle.roundedRect
smj

14

遵循以下两个简单步骤,即可增加您的商品的高度UItextField

步骤1:右键单击XIB文件,然后按照“源代码”中的说明打开它。

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

您可以使用以下步骤更改任何Apple控件的框架。


1
好笑,但这是最好的方法:)
VisioN 2013年

4
当您考虑其他程序员试图找到高度设置位置时,这不是最佳方法
bucherland 2014年

1
这听起来像一个可怕的主意。您应该将XIB源视为私有api。在将来的Xcode版本中,它可能会根据您的需要而改变。更不用说您已经将您的自定义设置隐藏在任何理智的人将来会寻找的地方。
迈克尔·彼得森

8

iOS 6的更新:使用自动布局,即使您仍然无法通过Interface Builder中的Size Inspector设置UITextField的高度(至少从Xcode 4.5 DP4开始),现在也可以在它,您可以从“界面生成器”中进行编辑。

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


1
这就是我想要的...但是如何设置高度限制,以便它根据UITextField的内容动态扩展高度?
jbandi 2012年

func updateTextFields(){如果#available(iOS 11,*){} {}其他{nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits(CGSize(width:1000,height:500))。height nameTextField.borderStyle =。我希望我的roundBorder textFields根据我在其上设置的自适应字体来调整其高度。这在iOS 11上是开箱即用的,但在iOS 9,10上根本不起作用。我使用以下代码:
PhoneyDeveloper

6

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


4

迅捷3

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

界面生成器

  • 替换UITextFieldBigTextField
  • 将更Border Style 改为none

到目前为止,这是最好的解决方案。
ilovebigmacs

3

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

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

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



2

仅当UITextField具有默认的圆角边框样式时,才可以在Attributes Inspector中对其高度进行调整,而是向其添加高度约束(加上满足自动布局系统所需的任何其他约束-通常只需使用添加缺少约束),并且调整约束将调整文本字段的高度。如果您不希望使用约束,则可以删除约束(清除约束),并且文本字段将保持在调整后的高度。

奇迹般有效。


1

试试这个

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

1
UITextField *txt = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [txt setText:@"Ananth"];
    [self.view addSubview:txt];

最后两个参数是width和height,您可以根据需要设置...


1

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


1

这很简单。

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

将您的文本字段声明为全球属性,并在您想要在代码中进行更改的任何地方更改其框架。

编码愉快!


2
这是一个危险且过时的答案。考虑到全局变量将使视图无法使用,因此使用全局变量是一种可怕的做法,并且使用灵活的布局对大小进行硬编码不能很好地缩放。
克里斯·康诺佛

1

如果要创建大量内容UITextFields,可以更快地将子类化UITextView并使用以下方法覆盖setFrame方法

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

这样你就可以打电话
[customTextField setFrame:<rect>];


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.