วิธีตั้งค่าความสูงของ UITextField


130

ฉันใช้ไฟล์UITextField. ฉันต้องการเพิ่มความสูง แต่ไม่พบคุณสมบัติที่จะทำเช่นนี้ ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

คำตอบ:


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

ฉันพยายามแล้ว แต่มันไม่ได้ทำอะไรให้ฉันเลย คุณวางเส้นเหล่านั้นไว้ที่ไหน? ฉันใส่ไว้ในเมธอด initWithNibName
janex

ควรอยู่ใน viewDidLoad หรือ ViewWillAppear / viewDidApper
Manjunath

2
ความสูงเริ่มต้นของ UITextField คือ 31 สำหรับทุกคนที่เพิ่มหนึ่งรายการโดยทางโปรแกรมและต้องการให้เป็นความสูงเริ่มต้น
simon_smiley

2
@HotJard ฉันอยากจะแนะนำให้ต่อต้านการแฮ็กในแหล่งที่มาของสตอรีบอร์ดมันมีแนวโน้มที่จะรีเซ็ตค่าบางอย่าง ตัวอย่างเช่นเมื่อคุณตั้งค่าความสูงของฟิลด์ข้อความเช่นนั้นและคุณเพิ่มปุ่มในมุมมองและแก้ไขขนาดข้อความของปุ่มฟิลด์ข้อความในมุมมองจะข้ามกลับไปที่ความสูงเริ่มต้น
Kevin

212

คุณไม่สามารถเปลี่ยนความสูงของรูปแบบเส้นขอบสี่เหลี่ยมผืนผ้าโค้งมนได้ ในการตั้งค่าความสูงเพียงเลือกรูปแบบเส้นขอบอื่น ๆ นอกเหนือจากเส้นขอบโค้งมนใน Xcode:

ป้อนคำอธิบายภาพที่นี่


เพิ่งแก้ไข setCornerRadius ด้วย 10.0 (หรืออื่น ๆ ) และคุณได้รับ UItextField ที่มีสไตล์เส้นขอบอีกครั้ง แต่มีความสูงที่กำหนดเอง :)
Beto

1
วิธีที่ดีกว่าคือ borderStyle = UITextBorderStyleRoundedRect;
เลิกใช้งาน Darren

ทำไมถึงทำไม่ได้
apex39

151

ในที่สุดฉันก็พบวิธีแก้ไขสำหรับสิ่งนี้!

ดังที่เราพบ IB ไม่อนุญาตให้เราเปลี่ยนความสูงของรูปแบบเส้นขอบมุมโค้งมน ดังนั้นให้เปลี่ยนเป็นสไตล์อื่นและตั้งค่าความสูงที่ต้องการ ในรหัสเปลี่ยนลักษณะเส้นขอบกลับ

textField.borderStyle = UITextBorderStyleRoundedRect;

เคล็ดลับที่ดี แต่คุณจะอนุญาตให้นำเสนอข้อความหลายบรรทัดได้อย่างไร?
Lucien

7
@Lucien - นั่นจะไม่ใช่ TextArea แทนที่จะเป็นฟิลด์ข้อความ
Craig

ฉันชอบสิ่งนี้มากยิ่งขึ้นเพราะฉันยังสามารถใช้นักออกแบบได้
RiddlerDev

viewWillLayoutSubviewsตรวจสอบให้แน่ใจว่านี่คือภายในทำ ฉันเพิ่มรูปภาพลงในช่องleftViewข้อความและข้อความบางส่วนและเมื่อเสร็จแล้วviewDidLoadทั้งคู่ก็ยืดออกอย่างแปลกประหลาด

สำหรับการใช้ Swift 3.0textField.borderStyle = .RoundedRect
Geoherna

85

หากคุณใช้เค้าโครงอัตโนมัติคุณสามารถทำได้บนกระดานเรื่องราว

เพิ่มข้อ จำกัด ด้านความสูงลงในช่องข้อความจากนั้นเปลี่ยนค่าคงที่ข้อจำกัดความสูงเป็นค่าที่ต้องการ ขั้นตอนแสดงด้านล่าง:

ขั้นตอนที่ 1: สร้างข้อจำกัดความสูงสำหรับช่องข้อความ

ป้อนคำอธิบายภาพที่นี่

ขั้นตอนที่ 2: เลือกข้อ จำกัด ความสูง

ป้อนคำอธิบายภาพที่นี่

ขั้นตอนที่ 3: เปลี่ยนค่าคงที่ของ Height Constraint

ป้อนคำอธิบายภาพที่นี่


มันใช้งานได้ แต่ฉันได้รับคำเตือนใหม่นี้มีแนวคิดใด ๆ : ตำแหน่งไม่ชัดเจนสำหรับ "Round Style Text Field"
Esqarrouth

หากมีข้อความระบุว่า Position ไม่ชัดเจนแสดงว่าคุณอาจไม่มีข้อ จำกัด ในการวางตำแหน่งวัตถุ UITextField คุณลองเพิ่มข้อ จำกัด เพื่อกำหนด x และ y ได้ไหม ตัวอย่างคุณสามารถเพิ่มข้อ จำกัด ของพื้นที่ชั้นนำ (สำหรับ x) และคุณสามารถเพิ่มข้อ จำกัด ของพื้นที่แนวตั้งจากด้านบน
user1046037

stackoverflow.com/questions/21295136/… เมื่อฉันทำเช่นนั้นฉันเพิ่มหน้าจอการพิมพ์
Esqarrouth

เคล็ดลับในการค้นหาข้อจำกัดความสูงที่ถูกต้องสำหรับแบบอักษรที่คุณใช้: ตั้งค่าborderStyleเป็นอะไรก็ได้ยกเว้นปัดเศษ ใช้Editor -> Size to Fit Contentเพื่อให้เค้าโครงทำสิ่งนั้น ใช้เจ้าหน้าที่ตรวจสอบคุณสมบัติของคุณUITextFieldเพื่อตรวจสอบความสูง ใช้สิ่งนี้เพื่อตั้งค่าข้อจำกัดความสูงของคุณและตอนนี้คุณสามารถเปลี่ยนborderStyleด้านหลังเป็นแบบโค้งมนได้
Benjohn

ฉันสามารถทำแบบเป็นโปรแกรมได้หรือไม่?
LKM

30

1. ) เปลี่ยนสไตล์เส้นขอบใน InterfaceBuilder

ป้อนคำอธิบายภาพที่นี่

2. ) หลังจากนั้นคุณสามารถเปลี่ยนขนาดได้

ป้อนคำอธิบายภาพที่นี่

3. ) สร้าง IBOutlet ไปยัง TextField ของคุณและป้อนรหัสต่อไปนี้ให้กับคุณviewDidLoad()เพื่อเปลี่ยน BorderStyle กลับ

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

ขอบคุณ
@David

29
  1. เลือกลักษณะเส้นขอบเป็นไม่ปัด

ป้อนคำอธิบายภาพที่นี่

  1. กำหนดความสูงของคุณ

ป้อนคำอธิบายภาพที่นี่

ในมุมมองของคุณ WillAppear กำหนดมุมเป็นรอบ

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

ป้อนคำอธิบายภาพที่นี่

  1. เพลิดเพลินกับ UITextField ที่กลมและสูงของคุณ

ยิ่งใหญ่ !! มันช่วยฉัน
Augustine PA

1
มันเยี่ยมมากมันช่วยได้เร็ว 3/4 ที่ฉันต้องใช้ ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
เปลี่ยนเป็น UITextField.BorderStyle.roundedRect
smj

14

UItextFieldทำตามขั้นตอนที่สองง่ายๆเหล่านี้และได้รับการเพิ่มความสูงของคุณ

ขั้นตอนที่ 1:คลิกขวาที่ไฟล์ XIB และเปิดขึ้นใน "Source Code"

ขั้นตอนที่ 2:ค้นหาสิ่งเดียวกันUITextfieldแหล่งข้อมูลและตั้งค่าเฟรมตามที่คุณต้องการ

คุณสามารถใช้ขั้นตอนเหล่านี้เพื่อเปลี่ยนกรอบของตัวควบคุมแอปเปิ้ล


1
ตลกดี แต่นี่เป็นวิธีที่ดีที่สุด :)
VisioN

4
นี่ไม่ใช่วิธีที่ดีที่สุดเมื่อคุณคิดถึงโปรแกรมเมอร์คนอื่น ๆ ที่พยายามหาตำแหน่งที่กำหนดความสูง
bucherland

1
ฟังดูเป็นความคิดที่แย่มาก คุณควรพิจารณาที่มา XIB เป็น API ส่วนตัว มันอาจเปลี่ยนไปจากคุณใน Xcode เวอร์ชันอนาคต ไม่ต้องพูดถึงคุณได้ซ่อนการปรับแต่งของคุณไว้ในที่สุดท้ายที่คนมีสติจะมองหามันในอนาคต
Michael Peterson

8

การอัปเดตสำหรับ iOS 6: ใช้การจัดวางอัตโนมัติแม้ว่าคุณจะยังไม่สามารถตั้งค่าความสูงของ UITextField จากตัวตรวจสอบขนาดในตัวสร้างอินเทอร์เฟซได้ (อย่างน้อย Xcode 4.5 DP4) ตอนนี้คุณสามารถตั้งค่าข้อ จำกัด ด้านความสูงได้แล้ว ซึ่งคุณสามารถแก้ไขได้จากตัวสร้างอินเทอร์เฟซ

นอกจากนี้หากคุณตั้งค่าความสูงของเฟรมตามรหัสการจัดวางอัตโนมัติอาจรีเซ็ตได้ขึ้นอยู่กับข้อ จำกัด อื่น ๆ ที่คุณอาจมี


1
นี่คือสิ่งที่ฉันกำลังมองหา ... แต่ฉันจะตั้งค่าข้อ จำกัด ด้านความสูงเพื่อให้ขยายความสูงแบบไดนามิกตามเนื้อหาของ UITextField ได้อย่างไร
jbandi

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (width: 1000, height: 500)). height nameTextField.borderStyle =. roundRect}} ฉันต้องการให้ textFields roundBorder ของฉันปรับความสูงตามแบบอักษรที่ปรับเปลี่ยนได้ที่ฉันตั้งค่าไว้ ใช้งานได้ทันทีบน iOS 11 แต่ใช้งานไม่ได้เลยบน iOS 9,10 ฉันใช้รหัสต่อไปนี้:
PhoneyDeveloper

6

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันแค่อยากจะเพิ่มว่าคุณต้องการเปลี่ยนความสูงของ UITextField จากภายใน IB ได้ง่ายๆเพียงแค่เปลี่ยนประเภทเส้นขอบของ UITextfield เป็นอะไรก็ได้ที่ไม่ใช่ประเภทมุมมนเริ่มต้น จากนั้นคุณสามารถยืดหรือเปลี่ยนแอตทริบิวต์ความสูงได้อย่างง่ายดายจากภายในตัวแก้ไข


4

swift3

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

ตัวสร้างอินเทอร์เฟซ

  • แทนที่UITextFieldด้วยBigTextField .
  • เปลี่ยนไปBorder Style none

นี่เป็นทางออกที่ดีที่สุด
ilovebigmacs

3

การมีส่วนร่วมที่น่าสมเพชของฉันกับปัญหาโง่ ๆ นี้ ใน IB ตั้งค่าสไตล์เป็นไม่มีเพื่อให้คุณสามารถตั้งค่าความสูงได้จากนั้นใน IB ตั้งค่าคลาสให้เป็นคลาสย่อยUITextFieldที่บังคับให้สไตล์เป็นสี่เหลี่ยมผืนผ้าโค้งมน

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

มันทำให้ฉันไม่ต้องแฮ็คไฟล์ XIB หรือเขียนโค้ดสไตล์ลงในตัวควบคุมมุมมองของฉัน



2

ความสูงของ UITextField ไม่สามารถปรับได้ใน Attributes Inspector ก็ต่อเมื่อมีรูปแบบเส้นขอบมุมโค้งมนเริ่มต้น แต่จะเพิ่มข้อ จำกัด ด้านความสูง (รวมถึงข้อ จำกัด อื่น ๆ ที่จำเป็นเพื่อให้เป็นไปตามระบบการจัดวางอัตโนมัติ - โดยปกติเพียงแค่ใช้ Add Missing Constraints) และ การปรับข้อ จำกัด จะปรับความสูงของช่องข้อความ หากคุณไม่ต้องการข้อ จำกัด สามารถลบข้อ จำกัด ได้ (Clear Constraints) และช่องข้อความจะยังคงอยู่ที่ความสูงที่ปรับไว้

ใช้งานได้เหมือนมีเสน่ห์



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

สองอาร์กิวเมนต์สุดท้ายคือความกว้างและความสูงคุณสามารถตั้งค่าได้ตามที่คุณต้องการ ...


1

คุณสามารถใช้คุณสมบัติเฟรมของฟิลด์ข้อความเพื่อเปลี่ยนเฟรม Like-Textfield.frame = CGRECTMake (แกน x, แกน y, ความกว้าง, ความสูง)


1

นี่ค่อนข้างง่าย

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

ประกาศฟิลด์ข้อความของคุณเป็นคุณสมบัติ gloabal และเปลี่ยนกรอบที่คุณต้องการทำในโค้ดของคุณ

Happy Coding!


2
นี่เป็นคำตอบที่อันตรายและล้าสมัย การใช้ตัวแปรส่วนกลางเป็นวิธีปฏิบัติที่แย่มากเนื่องจากจะทำให้มุมมองอยู่ได้นานกว่าและการเข้ารหัสขนาดจะไม่สามารถปรับขนาดได้ดีกับรูปแบบที่ยืดหยุ่น
Chris Conover

1

หากคุณกำลังสร้างจำนวนมากUITextFieldsสามารถทำได้เร็วกว่าใน subclass UITextViews และแทนที่เมธอด setFrame ด้วย

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

ด้วยวิธีนี้คุณสามารถโทร
[customTextField setFrame:<rect>];


0

ฉันมีปัญหาเดียวกัน ลองใช้วิธีแก้ปัญหาบางอย่างที่นี่ แต่แทนที่จะทำทั้งหมดนี้ mumbo-jumbo ฉันพบว่าแค่ตั้งค่าความสูงก็เพียงพอแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.