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?

Arun
sumber

Jawaban:

83
CGRect frameRect = textField.frame;
frameRect.size.height = 100; // <-- Specify the height you want here.
textField.frame = frameRect;
Manjunath
sumber
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

Brian
sumber
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;
nathanbroyles
sumber
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

pengguna1046037
sumber
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
David Seek
sumber
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
Darren yang sudah ditinggalkan
sumber
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.

Sunil Targe
sumber
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.

Guillaume Laurent
sumber
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.

Mark McCorkle
sumber
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.
neoneye
sumber
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.

Jeffery Thomas
sumber
3

Dalam penggunaan Swift 3:

yourTextField.frame.size.height = 30
Kaptain
sumber
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.

Simon.
sumber
1

coba ini

UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 280, 120)];
Tendulkar
sumber
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 ...

Pengguna-1070892
sumber
1

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

Harshit_Jobs
sumber
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!

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

mylogon
sumber
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.

Alix
sumber