UITextField yüksekliği nasıl ayarlanır?


130

Ben bir UITextField. Yüksekliğini artırmak istiyorum ama bunu yapacak bir mülk bulamadım. Bunu nasıl başarabilirim?

Yanıtlar:


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

4
.xib'i kaynak olarak açmak çok daha kolay ur IBUITextField'ı bulun ve <string key = "NSFrame"> özelliğini değiştirin
HotJard

Bunu denedim ama benim için hiçbir şey yapmadı. Bu satırları nereye koyuyorsunuz? Bunu initWithNibName yöntemine koydum.
janex

görünümde olmalıdırDidLoad veya ViewWillAppear / viewDidApper
Manjunath

2
Bir UITextField'ın varsayılan yüksekliği
31'dir,

2
@HotJard Film şeridi kaynağında hacklemeye karşı tavsiye ederim, bazı değerlerini sıfırlama eğilimindedir. Örneğin, metin alanı yüksekliğini bu şekilde ayarladığınızda ve görünüme bir düğme eklediğinizde ve düğmenin metin boyutunu düzenlediğinizde, görünümdeki metin alanları varsayılan yüksekliklerine geri dönecektir.
Kevin

212

Yuvarlatılmış dikdörtgen kenarlık stilinin yüksekliğini değiştiremezsiniz. Yüksekliği ayarlamak için, Xcode'da yuvarlak kenarlık dışında herhangi bir kenarlık stilini seçin:

görüntü açıklamasını buraya girin


Sadece setCornerRadius 10.0 (veya herhangi biri) ile değiştirildi ve tekrar UItextField ile border Style'ı aldınız ama özel yükseklik ile :)
Beto

1
Daha iyi bir yol, borderStyle = UITextBorderStyleRoundedRect;
Darren

Neden mümkün değil?
apex39

151

Sonunda bunun düzeltmesini buldum!

Bulduğumuz gibi, IB, yuvarlak köşe bordür stilinin yüksekliğini değiştirmemize izin vermiyor. Bu yüzden diğer stillerden herhangi birine değiştirin ve istediğiniz yüksekliği ayarlayın. Kodda sınır stilini geri değiştirin.

textField.borderStyle = UITextBorderStyleRoundedRect;

İyi hile, ama metnin çok satırlı sunumuna nasıl izin verebilirsiniz?
Lucien

7
@Lucien - Bu bir metin alanı yerine bir TextArea olmaz mıydı
Craig

Bunu daha çok seviyorum çünkü tasarımcıyı hala kullanabiliyorum.
RiddlerDev

Bunun içeride yapıldığından emin olun viewWillLayoutSubviews. leftViewMetin alanına bir resim ve biraz metin ekledim ve bu yapıldığında viewDidLoadikisi de tuhaf bir şekilde uzanıyor.

Swift 3.0 kullanımı içintextField.borderStyle = .RoundedRect
Geoherna

85

Otomatik Yerleşim kullanıyorsanız, bunu Hikaye panosunda yapabilirsiniz.

Metin alanına bir yükseklik sınırlaması ekleyin, ardından yükseklik sınırlaması sabitini istediğiniz herhangi bir değere değiştirin. Adımlar aşağıda gösterilmiştir:

1. Adım: Metin alanı için bir yükseklik sınırlaması oluşturun

görüntü açıklamasını buraya girin

Adım 2: Yükseklik Kısıtlamasını Seçin

görüntü açıklamasını buraya girin

Adım 3: Yükseklik Kısıtlamasının sabit değerini değiştirin

görüntü açıklamasını buraya girin


İşe yaradı ama şu yeni uyarıyı aldım, herhangi bir fikir: Konum "Yuvarlak Stil Metin Alanı" için belirsiz
Esqarrouth

Konum belirsiz diyorsa, bu, UITextField nesnesini konumlandırmak için bir kısıtlamanız olmayabileceği anlamına gelir. X ve y'yi tanımlamak için bir kısıt eklemeyi deneyebilir misiniz? Örnek, önde gelen boşluk kısıtlaması (x için) ekleyebilir ve üstten dikey boşluk kısıtlaması ekleyebilirsiniz.
user1046037

stackoverflow.com/questions/21295136/… bunu yaptığımda bir baskı ekranı ekledim
Esqarrouth

Kullandığınız yazı tipi için doğru yükseklik sınırlamasını bulmak için bir ipucu: Yuvarlatılmış dışındaborderStyle herhangi bir değere ayarlayın . Editor -> Size to Fit ContentDüzenin işini yapması için kullanın . UITextFieldYüksekliğini kontrol etmek için mülk denetçisini kullanın . Yükseklik sınırlamanızı ayarlamak için bunu kullanın ve şimdi borderStylearka tarafı yuvarlatılmış olana dönüştürebilirsiniz.
Benjohn

Bunu programlı olarak yapabilir miyim?
LKM

30

1.) InterfaceBuilder'da kenarlık stilini değiştirin.

görüntü açıklamasını buraya girin

2.) Bundan sonra boyutunu değiştirebilirsiniz.

görüntü açıklamasını buraya girin

3.) TextField'ınıza bir IBOutlet oluşturun viewDidLoad()ve BorderStyle'ı tekrar değiştirmek için aşağıdaki kodu hesabınıza girin .

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Teşekkür Seek @ David
Vinoth Vino

29
  1. Kenarlık stilini yuvarlatılmamış olarak seçin

görüntü açıklamasını buraya girin

  1. Boyunuzu ayarlayın

görüntü açıklamasını buraya girin

Görünümünüzde WillAppear köşeleri yuvarlak olarak ayarlayın

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

görüntü açıklamasını buraya girin

  1. Yuvarlak ve uzun UITextField'in keyfini çıkarın

Harika!! Bana yardımcı oldu.
Augustine PA

1
Bu harikaydı, hızlı bir şekilde 3/4 kullanmam gerekti, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
UITextField.BorderStyle.roundedRect olarak değiştirildi
smj

14

Bu iki basit adımı izleyin ve boyunuzu artırın UItextField.

Adım 1: XIB dosyasına sağ tıklayın ve "Kaynak Kod" daki gibi açın.

Adım 2: Aynı UITextfieldkaynağı bulun ve çerçeveyi istediğiniz gibi ayarlayın.

Herhangi bir elma kontrolünün çerçevesini değiştirmek için bu adımları kullanabilirsiniz.


1
Komik ama bu en iyi yol :)
VisioN

4
Bu, diğer programcı yüksekliği setted nerede bulmaya çalışırken düşününce en iyi yol değildir
bucherland

1
Bu korkunç bir fikir gibi geliyor. XIB kaynağını özel bir api olarak düşünmelisiniz. Xcode'un gelecekteki sürümünde altınızdan değişebilir. Kişiselleştirmenizi, aklı başında herhangi bir kişinin gelecekte arayacağı son yerde gizlediğinizden bahsetmiyorum bile.
Michael Peterson

8

İOS 6 için bir güncelleme: Otomatik düzen kullanarak, Arabirim Oluşturucu'daki Boyut Denetçisinden UITextField'in yüksekliğini hala ayarlayamasanız bile (en azından Xcode 4.5 DP4'ten itibaren), artık bir Yükseklik kısıtlaması ayarlamak mümkündür. Arayüz Oluşturucu'dan düzenleyebileceğiniz.

Ayrıca, çerçevenin yüksekliğini koda göre ayarlıyorsanız, otomatik düzen, görünümünüzün sahip olabileceği diğer kısıtlamalara bağlı olarak çerçeveyi sıfırlayabilir.


1
Benim aradığım şey bu ... ama yükseklik sınırlamasını, yüksekliği UITextField içeriğine göre dinamik olarak genişletecek şekilde nasıl ayarlayabilirim?
jbandi

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (genişlik: 1000, yükseklik: 500)). yükseklik adıTextField.borderStyle =. roundedRect}} RoundBorder textFields'ımın, üzerlerinde ayarladığım uyarlanabilir yazı tipine göre yüksekliklerini ayarlamasını istiyorum. Bu, iOS 11'de kutudan çıktığı gibi çalışır ancak iOS 9,10'da hiç çalışmaz. Şu kodu kullanıyorum:
PhoneyDeveloper

6

Bunun eski bir soru olduğunu biliyorum, ancak bir UITextField'in yüksekliğini IB'nin içinden kolayca değiştirmek istiyorsanız, o zaman basitçe bu UITextfield'ın kenarlık türünü varsayılan yuvarlak köşe türü dışında bir şeyle değiştirmek istedim. Ardından, düzenleyicinin içinden yükseklik niteliklerini kolayca uzatabilir veya değiştirebilirsiniz.


4

swift3

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

Arayüz Oluşturucu

  • Değiştir UITextFieldile BigTextField.
  • Değişim Border Style To none.

Bu açık ara en iyi çözümdür.
ilovebigmacs

3

Bu aptal soruna acınası katkım. IB'de stili hiçbiri olarak ayarlayın, böylece yüksekliği ayarlayabilirsiniz, ardından IB'de sınıfı UITextField, stili yuvarlatmaya zorlayan bir alt sınıf olacak şekilde ayarlayın .

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

XIB dosyasını kırmaktan veya görünüm denetleyicime stil kodu yazmak zorunda kalmamı engelledi.


3

Swift 3'te şunları kullanın:

yourTextField.frame.size.height = 30

2

Bir UITextField'ın yüksekliği, Attributes Inspector'da yalnızca varsayılan yuvarlatılmış köşeler kenarlık stiline sahip olduğunda ayarlanamaz, ancak buna bir yükseklik kısıtlaması (artı otomatik düzen sistemini tatmin etmek için gereken diğer kısıtlamalar - genellikle sadece Eksik Kısıtlamaları Ekle'yi kullanarak) eklenir ve kısıtlamanın ayarlanması metin alanının yüksekliğini ayarlayacaktır. Kısıtlama istemiyorsanız, kısıtlamalar kaldırılabilir (Kısıtlamaları Temizle) ve metin alanı ayarlanan yükseklikte kalacaktır.

Tıkır tıkır çalışıyor.


1

bunu dene

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

Son iki argüman genişlik ve yüksekliktir, dilediğiniz gibi ayarlayabilirsiniz ...


1

Metin alanı gibi çerçeveyi değiştirmek için metin alanının çerçeve özelliğini kullanabilirsiniz. Çerçeve = CGRECTMake (x ekseni, y ekseni, genişlik, yükseklik)


1

Bu oldukça basit.

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

Metin alanınızı küresel bir özellik olarak bildirin ve kodunuzda yapmak istediğiniz yerde çerçevesini değiştirin.

Mutlu Kodlama!


2
Bu tehlikeli ve modası geçmiş bir cevap. Genel bir değişkeni kullanmak, görünümün ötesine geçeceği ve bir boyutu kodlamanın esnek düzenlerle iyi ölçeklenmeyeceği düşünüldüğünde korkunç bir uygulamadır.
Chris Conover

1

Birçoğunu oluşturuyorsanız, s UITextFieldsalt sınıflarına daha hızlı geçebilir UITextViewve setFrame yöntemini geçersiz kılabilir.

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

Bu şekilde arayabilirsin
[customTextField setFrame:<rect>];


0

Ben de aynı sorunu yaşıyordum. Buradaki çözümlerin bazılarını denedim ama tüm bu saçmalıkları yapmak yerine. Sadece yükseklik kısıtlamasını ayarlamanın yeterli olduğunu buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.