Bagaimana cara mengatur ketinggian UITextField?


130

Saya menggunakan a UITextField. Saya ingin menambah tinggi badannya tetapi saya belum menemukan properti untuk melakukan ini. Bagaimana saya bisa mencapai ini?

Jawaban:


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

4
jauh lebih mudah untuk membuka .xib sebagai sumber menemukan IBUITextField Anda dan mengubah properti <string key = "NSFrame">
HotJard

Saya mencobanya tetapi tidak melakukan apa pun untuk saya. Di mana Anda meletakkan garis-garis itu? Saya memasukkannya ke dalam metode initWithNibName.
janex

itu harus di viewDidLoad atau ViewWillAppear / viewDidApper
Manjunath

2
Ketinggian default sebuah UITextField adalah 31, untuk siapa pun yang menambahkan secara
terprogram

2
@HotJard Saya akan merekomendasikan untuk tidak meretas sumber storyboard, cenderung untuk mereset beberapa nilainya. Misalnya, ketika Anda mengatur tinggi bidang teks seperti itu, dan Anda menambahkan tombol ke tampilan dan mengedit ukuran teks tombol, bidang teks dalam tampilan akan melompat kembali ke ketinggian standarnya.
Kevin

212

Anda tidak dapat mengubah ketinggian gaya batas persegi panjang bulat. Untuk mengatur ketinggian, cukup pilih gaya perbatasan selain perbatasan bulat di Xcode:

masukkan deskripsi gambar di sini


Baru saja memodifikasi setCornerRadius dengan 10.0 (atau apa saja) dan Anda mendapat lagi UItextField dengan Gaya tepi tetapi dengan tinggi khusus :)
Beto

1
Cara yang lebih baik adalah borderStyle = UITextBorderStyleRoundedRect;
Darren yang

Kenapa itu tidak mungkin?
apex39

151

Saya akhirnya menemukan perbaikan untuk ini!

Seperti yang telah kita temukan, IB tidak memungkinkan kita untuk mengubah ketinggian gaya perbatasan sudut bulat. Jadi ubah ke gaya lain dan atur ketinggian yang diinginkan. Dalam kode, ubah kembali gaya perbatasan.

textField.borderStyle = UITextBorderStyleRoundedRect;

Trik yang bagus, tetapi bagaimana Anda bisa mengizinkan presentasi multi-baris dari teks?
Lucien

7
@Lucien - Bukankah itu TextArea daripada textfield
Craig

Saya suka ini lebih baik karena saya masih bisa menggunakan perancang.
RiddlerDev

Pastikan ini dilakukan di dalam viewWillLayoutSubviews. Saya menambahkan gambar ke bidang leftViewteks dan beberapa teks, dan ketika ini dilakukan di viewDidLoadkeduanya membentang aneh.

Untuk penggunaan Swift 3.0textField.borderStyle = .RoundedRect
Geoherna

85

Jika Anda menggunakan Tata Letak Otomatis maka Anda bisa melakukannya di papan Cerita.

Tambahkan batasan ketinggian ke bidang teks, lalu ubah konstanta batasan tinggi ke nilai yang diinginkan. Langkah-langkahnya ditunjukkan di bawah ini:

Langkah 1: Buat batasan ketinggian untuk bidang teks

masukkan deskripsi gambar di sini

Langkah 2: Pilih Batasan Tinggi

masukkan deskripsi gambar di sini

Langkah 3: Ubah nilai konstan Tinggi Kendala

masukkan deskripsi gambar di sini


Itu berhasil tetapi saya mendapat peringatan baru ini, gagasan: Posisi ambigu untuk "Round Style Text Field"
Esqarrouth

Jika dikatakan Posisi ambigu, maka itu berarti Anda Anda mungkin tidak memiliki kendala untuk memposisikan objek UITextField. Bisakah Anda mencoba menambahkan kendala untuk mendefinisikan x dan y. Contoh Anda bisa menambahkan batasan ruang terdepan (untuk x) dan Anda bisa menambahkan batasan ruang vertikal dari atas.
user1046037

stackoverflow.com/questions/21295136/… ketika saya melakukan itu saya menambahkan layar cetak
Esqarrouth

Kiat untuk menemukan batasan ketinggian yang tepat untuk font yang Anda gunakan: Setel borderStyleke apa pun kecuali bulat. Gunakan Editor -> Size to Fit Contentagar tata letak melakukan tugasnya. Gunakan inspektur properti pada Anda UITextFielduntuk memeriksa ketinggiannya. Gunakan ini untuk mengatur batasan ketinggian Anda, dan sekarang Anda dapat mengubah borderStylekembali ke yang bulat.
Benjohn

Bisakah saya melakukannya secara terprogram?
LKM

30

1.) Ubah Gaya perbatasan di InterfaceBuilder.

masukkan deskripsi gambar di sini

2.) Setelah itu Anda dapat mengubah ukuran.

masukkan deskripsi gambar di sini

3.) Buat IBOutlet ke TextField Anda dan masukkan kode berikut untuk Anda viewDidLoad()untuk mengubah kembali BorderStyle.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Terima kasih @David Seek
Vinoth Vino

29
  1. Pilih gaya perbatasan sebagai tidak bulat

masukkan deskripsi gambar di sini

  1. Atur tinggi badan Anda

masukkan deskripsi gambar di sini

di viewWillAppear Anda mengatur sudut sebagai bulat

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

masukkan deskripsi gambar di sini

  1. Nikmati UITextField bundar dan tinggi Anda

Bagus!! Ini membantu saya.
Augustine PA

1
Ini hebat, itu membantu untuk 3/4 cepat saya harus menggunakan, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
Itu berubah menjadi UITextField.BorderStyle.roundedRect
smj

14

Ikuti dua langkah sederhana ini dan dapatkan peningkatan ketinggian Anda UItextField.

Langkah 1: klik kanan pada file XIB dan buka seperti pada "Source Code".

Langkah 2: Temukan UITextfieldsumber yang sama dan atur bingkai seperti yang Anda inginkan.

Anda dapat menggunakan langkah-langkah ini untuk mengubah bingkai kontrol apel apa pun.


1
Lucu tapi ini cara terbaik :)
VisioN

4
Ini bukan cara terbaik ketika Anda berpikir tentang programmer lain yang mencoba menemukan di mana ketinggian ditentukan
bucherland

1
Ini terdengar seperti ide yang buruk. Anda harus mempertimbangkan sumber XIB sebagai api pribadi. Mungkin berubah dari bawah Anda di versi Xcode masa depan. Belum lagi Anda telah menyembunyikan kustomisasi Anda di tempat terakhir yang akan dicari orang waras di masa depan.
Michael Peterson

8

Pembaruan untuk iOS 6: menggunakan tata-letak otomatis, meskipun Anda masih tidak dapat mengatur ketinggian UITextField dari Inspektur Ukuran di Pembuat Antarmuka (setidaknya Xcode 4.5 DP4), sekarang dimungkinkan untuk menetapkan batasan Tinggi pada itu, yang dapat Anda edit dari Interface Builder.

Selain itu, jika Anda mengatur tinggi frame berdasarkan kode, tata letak otomatis dapat mengatur ulang tergantung pada kendala lain yang mungkin Anda miliki.


1
Ini yang saya cari ... tapi bagaimana cara mengatur batasan ketinggian sehingga memperluas ketinggian secara dinamis berdasarkan konten dari UITextField?
jbandi

func updateTextFields () {jika # tersedia (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (lebar: 1000, tinggi: 500)). height nameTextField.borderStyle =. roundedRect}} Saya ingin roundForder textFields saya menyesuaikan ketinggiannya berdasarkan font adaptif yang saya atur pada mereka. Ini berfungsi di luar kotak pada iOS 11 tetapi tidak bekerja sama sekali di iOS 9,10. Saya menggunakan kode berikut:
PhoneyDeveloper

6

Saya tahu ini pertanyaan lama tapi saya hanya ingin menambahkan jika Anda ingin dengan mudah mengubah ketinggian UITextField dari dalam IB kemudian cukup mengubah jenis perbatasan UITextfield ke apa pun selain jenis sudut bulat standar. Kemudian Anda dapat meregangkan atau mengubah atribut ketinggian dengan mudah dari dalam editor.


4

swift3

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

Pembuat Antarmuka

  • Ganti UITextFielddenganBigTextField .
  • Ubah Border Style ke none.

Sejauh ini ini adalah solusi terbaik.
ilovebigmacs

3

Kontribusi menyedihkan saya untuk masalah bodoh ini. Di IB atur style ke none sehingga Anda bisa mengatur ketinggian, lalu di IB atur kelas menjadi subclass UITextFieldyang memaksa style menjadi rounded rect.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Itu membuat saya tidak perlu meretas file XIB atau menulis kode gaya ke pengontrol tampilan saya.


3

Dalam penggunaan Swift 3:

yourTextField.frame.size.height = 30

2

Ketinggian UITextField tidak dapat disesuaikan dalam Attributes Inspector hanya jika memiliki gaya batas sudut bulat standar, tetapi menambahkan batasan ketinggian (ditambah kendala lain yang diperlukan untuk memenuhi sistem pembayaran otomatis - seringkali dengan hanya menggunakan Add Missing Constraints) untuknya dan menyesuaikan kendala akan menyesuaikan ketinggian bidang teks. Jika Anda tidak ingin kendala, kendala dapat dihapus (Hapus Kendala) dan bidang teks akan tetap pada ketinggian yang disesuaikan.

Bekerja seperti pesona.


1

coba ini

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

Dua argumen terakhir adalah lebar dan tinggi, Anda dapat mengatur sesuai keinginan ...


1

Anda dapat menggunakan properti bingkai dari textfield untuk mengubah frame Like-Textfield.frame = CGRECTMake (sumbu x, sumbu y, lebar, tinggi)


1

Ini cukup sederhana.

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

Nyatakan bidang teks Anda sebagai properti umum & ubah bingkainya di mana pun Anda ingin melakukannya dalam kode Anda.

Selamat Coding!


2
Ini adalah jawaban yang berbahaya dan ketinggalan zaman. Menggunakan variabel global adalah praktik yang mengerikan mengingat itu akan hidup lebih lama dari tampilan, dan ukuran hardcoding tidak akan skala dengan baik dengan tata letak yang fleksibel.
Chris Conover

1

Jika Anda membuat banyak UITextFieldsitu bisa lebih cepat untuk subkelas UITextViewdan menimpa metode setFrame dengan

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

Dengan cara ini Anda bisa menelepon
[customTextField setFrame:<rect>];


0

Saya mengalami masalah yang sama. mencoba beberapa solusi di sini tetapi daripada melakukan semua omong kosong ini. Saya menemukan pengaturan ketinggian saja sudah cukup.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.