Làm cách nào để đặt chiều cao UITextField?


130

Tôi đang sử dụng a UITextField. Tôi muốn tăng chiều cao của nó nhưng tôi không tìm thấy bất kỳ tài sản nào để làm điều này. Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


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

4
Việc mở .xib dễ dàng hơn nhiều khi tìm nguồn IBUITextField và thay đổi thuộc tính <string key = "NSFrame">
HotJard 25/03/13

Tôi đã thử điều đó nhưng nó không làm gì cho tôi. Nơi nào bạn đặt những dòng đó? Tôi đặt nó trong phương thức initWithNibName.
janex

cần có trong viewDidLoad hoặc ViewWillAppear / viewDidApper
Manjunath

2
Chiều cao mặc định của UITextField là 31, cho bất kỳ ai thêm một chương trình và muốn nó có chiều cao mặc định
simon_smiley

2
@HotJard Tôi khuyên bạn nên chống hack trong nguồn bảng phân cảnh, nó có xu hướng thiết lập lại một số giá trị của nó. Ví dụ: khi bạn đặt chiều cao của trường văn bản như thế và bạn thêm một nút vào chế độ xem và chỉnh sửa kích thước văn bản của nút, các trường văn bản trong chế độ xem sẽ quay trở lại chiều cao mặc định của chúng.
Kevin

212

Bạn không thể thay đổi chiều cao của kiểu viền tròn. Để đặt chiều cao, chỉ cần chọn bất kỳ kiểu viền nào ngoài đường viền được làm tròn trong Xcode:

nhập mô tả hình ảnh ở đây


Chỉ cần sửa đổi setCornerRadius với 10.0 (hoặc bất kỳ) và bạn đã nhận lại UItextField với Kiểu viền nhưng với chiều cao tùy chỉnh :)
Beto

1
Một cách tốt hơn là BorderStyle = UITextBorderStyleRoundedRect;
Không được chấp nhận Darren

Tại sao nó không thể?
apex39

151

Cuối cùng tôi đã tìm thấy bản sửa lỗi cho việc này!

Như chúng tôi đã tìm thấy, IB không cho phép chúng tôi thay đổi chiều cao của kiểu viền góc tròn. Vì vậy, thay đổi nó thành bất kỳ phong cách khác và thiết lập chiều cao mong muốn. Trong mã thay đổi kiểu viền trở lại.

textField.borderStyle = UITextBorderStyleRoundedRect;

Thủ thuật tốt, nhưng làm thế nào bạn có thể cho phép trình bày văn bản nhiều dòng?
Lucien

7
@Lucien - Sẽ không phải là một TextArea chứ không phải là một trường văn bản
Craig

Tôi thích điều này thậm chí tốt hơn bởi vì tôi vẫn có thể sử dụng nhà thiết kế.
RiddlerDev

Hãy chắc chắn rằng điều này được thực hiện bên trong viewWillLayoutSubviews. Tôi đã thêm một hình ảnh vào trường leftViewvăn bản và một số văn bản, và khi điều này được thực hiện trong viewDidLoadcả hai đều kéo dài một cách kỳ lạ.

Để sử dụng Swift 3.0textField.borderStyle = .RoundedRect
Geoherna

85

Nếu bạn đang sử dụng Giao diện tự động thì bạn có thể thực hiện trên bảng Story.

Thêm một ràng buộc chiều cao cho trường văn bản, sau đó thay đổi hằng số ràng buộc chiều cao thành bất kỳ giá trị mong muốn nào. Các bước được hiển thị dưới đây:

Bước 1: Tạo ràng buộc chiều cao cho trường văn bản

nhập mô tả hình ảnh ở đây

Bước 2: Chọn ràng buộc chiều cao

nhập mô tả hình ảnh ở đây

Bước 3: Thay đổi giá trị không đổi của Chiều cao ràng buộc

nhập mô tả hình ảnh ở đây


Nó đã hoạt động nhưng tôi đã nhận được cảnh báo mới này, bất kỳ ý tưởng nào: Vị trí không rõ ràng đối với "Trường văn bản kiểu tròn"
Esqarrouth

Nếu nó nói Position là mơ hồ, thì điều đó có nghĩa là bạn Bạn có thể không bị ràng buộc trong việc định vị đối tượng UITextField. Bạn có thể thử thêm một ràng buộc để xác định x và y. Ví dụ bạn có thể thêm ràng buộc không gian hàng đầu (cho x) và bạn có thể thêm ràng buộc không gian dọc từ trên xuống.
dùng1046037

stackoverflow.com/questions/21295136/ hy khi tôi làm điều đó tôi đã thêm một màn hình in
Esqarrouth

Mẹo để tìm giới hạn chiều cao chính xác cho phông chữ bạn đang sử dụng: Đặt borderStylethành bất cứ thứ gì ngoại trừ làm tròn. Sử dụng Editor -> Size to Fit Contentđể có bố trí làm việc của nó. Sử dụng thanh tra tài sản trên của bạn UITextFieldđể kiểm tra chiều cao của nó. Sử dụng công cụ này để thiết lập giới hạn chiều cao của bạn và bây giờ bạn có thể thay đổi mặt borderStylesau thành hình tròn.
Stewohn

Tôi có thể làm điều đó theo chương trình không?
LKM

30

1.) Thay đổi Kiểu viền trong InterfaceBuilder.

nhập mô tả hình ảnh ở đây

2.) Sau đó, bạn có thể thay đổi kích thước.

nhập mô tả hình ảnh ở đây

3.) Tạo IBOutlet cho TextField của bạn và nhập mã sau đây viewDidLoad()để thay đổi BorderStyle trở lại.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Cảm ơn
@David

29
  1. Chọn kiểu viền không tròn

nhập mô tả hình ảnh ở đây

  1. Đặt chiều cao của bạn

nhập mô tả hình ảnh ở đây

trong chế độ xem của bạnWillAppear đặt các góc là tròn

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

nhập mô tả hình ảnh ở đây

  1. Thưởng thức UITextField tròn và cao của bạn

Tuyệt quá!! Nó đã giúp tôi.
Augustine PA

1
Điều này thật tuyệt vời, nó đã giúp cho 3/4 nhanh chóng tôi phải sử dụng, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
Nó đã đổi thành UITextField.BorderStyle.roundedRect
smj

14

Thực hiện theo hai bước đơn giản và tăng chiều cao của bạn UItextField.

Bước 1: nhấp chuột phải vào tệp XIB và mở nó như trong "Mã nguồn".

Bước 2: Tìm cùng một UITextfieldnguồn và đặt khung theo ý muốn.

Bạn có thể sử dụng các bước này để thay đổi khung của bất kỳ điều khiển táo nào.


1
Hài hước nhưng đây là cách tốt nhất :)
VisioN

4
Đây không phải là cách tốt nhất khi bạn nghĩ về các lập trình viên khác đang cố gắng tìm nơi giải quyết chiều cao
bucherland

1
Điều này nghe có vẻ là một ý tưởng khủng khiếp. Bạn nên xem xét nguồn XIB như một api riêng. Nó có thể thay đổi từ bên dưới bạn trong phiên bản Xcode tương lai. Chưa kể bạn đã ẩn tùy chỉnh của mình ở nơi cuối cùng mà bất kỳ người tỉnh táo nào cũng sẽ tìm kiếm nó trong tương lai.
Michael Peterson

8

Bản cập nhật cho iOS 6: sử dụng bố cục tự động, mặc dù bạn vẫn không thể đặt chiều cao của UITextField từ Trình kiểm tra kích thước trong Trình tạo giao diện (ít nhất là từ Xcode 4.5 DP4), giờ đây có thể đặt ràng buộc Chiều cao nó, bạn có thể chỉnh sửa từ Trình tạo giao diện.

Ngoài ra, nếu bạn đang đặt chiều cao của khung theo mã, bố cục tự động có thể đặt lại tùy thuộc vào các ràng buộc khác mà chế độ xem của bạn có thể có.


1
Đây là những gì tôi đang tìm kiếm ... nhưng làm cách nào để đặt giới hạn chiều cao để nó mở rộng chiều cao một cách linh hoạt dựa trên nội dung của UITextField?
jbandi

func updateTextFields () {if #av Available (iOS 11, *) {} khác {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (width: 1000, height: 500) roundRect}} Tôi muốn textField của RoundBorder điều chỉnh chiều cao của chúng dựa trên phông chữ thích ứng mà tôi đang đặt trên chúng. Điều này hoạt động tốt trên iOS 11 nhưng hoàn toàn không hoạt động trên iOS 9,10. Tôi sử dụng mã sau:
PhoneyDeveloper

6

Tôi biết đây là một câu hỏi cũ nhưng tôi chỉ muốn thêm nếu bạn muốn dễ dàng thay đổi chiều cao của UITextField từ bên trong IB, sau đó chỉ cần thay đổi loại đường viền của UITextfield thành bất kỳ loại nào khác ngoài loại góc tròn mặc định. Sau đó, bạn có thể kéo dài hoặc thay đổi các thuộc tính chiều cao dễ dàng từ bên trong trình chỉnh sửa.


4

nhanh chóng3

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

Trình tạo giao diện

  • Thay thế UITextFieldbằng BigTextField.
  • Thay đổi Border Style thành none.

Đây là giải pháp tốt nhất.
ilovebigmacs

3

Đóng góp thảm hại của tôi cho vấn đề ngu ngốc này. Trong IB đặt kiểu là không để bạn có thể đặt chiều cao, sau đó trong IB đặt lớp là lớp con của kiểu UITextFieldđó buộc kiểu phải được làm tròn.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Nó giúp tôi không phải hack tệp XIB hoặc viết mã kiểu vào trình điều khiển xem của tôi.


3

Trong Swift 3 sử dụng:

yourTextField.frame.size.height = 30

2

Không thể điều chỉnh chiều cao của UITextField trong Trình kiểm tra thuộc tính khi nó có kiểu viền góc tròn mặc định, nhưng thêm một ràng buộc về chiều cao (cộng với bất kỳ ràng buộc nào khác được yêu cầu để đáp ứng hệ thống tự động thanh toán - thường chỉ bằng cách sử dụng Thêm ràng buộc bỏ qua) cho nó và điều chỉnh các ràng buộc sẽ điều chỉnh chiều cao của trường văn bản. Nếu bạn không muốn các ràng buộc, các ràng buộc có thể được loại bỏ (Xóa các ràng buộc) và trường văn bản sẽ vẫn ở độ cao đã điều chỉnh.

Hoạt động như một lá bùa.


1

thử cái này

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];

Hai đối số cuối cùng là chiều rộng và chiều cao, Bạn có thể đặt theo ý muốn ...


1

Bạn có thể sử dụng thuộc tính khung của trường văn bản để thay đổi khung Like-Textfield.frame = CGRECTMake (trục x, trục y, chiều rộng, chiều cao)


1

Điều này khá đơn giản.

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

Khai báo trường văn bản của bạn như một thuộc tính tuyệt vời và thay đổi khung của nó ở bất cứ nơi nào bạn muốn thực hiện trong mã của mình.

Chúc mừng mã hóa!


2
Đây là một câu trả lời nguy hiểm và lỗi thời. Sử dụng một biến toàn cục là một thực tiễn khủng khiếp khi xem xét nó sẽ tồn tại lâu hơn tầm nhìn và mã hóa kích thước sẽ không mở rộng tốt với bố cục linh hoạt.
Chris Conover

1

Nếu bạn đang tạo rất nhiều UITextFields, có thể nhanh hơn để phân lớp UITextViewvà ghi đè phương thức setFrame bằng

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

Bằng cách này bạn chỉ có thể gọi
[customTextField setFrame:<rect>];


0

Tôi có những vấn đề giống nhau. đã thử một số giải pháp ở đây nhưng thay vì thực hiện tất cả mumbo-jumbo này. Tôi thấy chỉ cần thiết lập hạn chế chiều cao là đủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.