Як встановити висоту 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 Я б порекомендував не зламати джерело розкадровки, воно, як правило, скидає деякі його значення. Наприклад, коли ви встановите таким чином висоту текстового поля, і ви додасте кнопку до перегляду та відредагуйте розмір тексту кнопки, текстові поля у вікні відскакують назад до стандартної висоти.
— Кевін

212

Ви не можете змінити висоту стилю округлої прямої рамки. Щоб встановити висоту, просто виберіть будь-який стиль рамки, окрім округлої рамки в Xcode:

введіть тут опис зображення


Щойно модифікований setCornerRadius з 10.0 (або будь-яким) і ви знову отримали UItextField з межею Стиль, але з власною висотою :)
— Beto

1
Кращий спосіб - borderStyle = UITextBorderStyleRoundedRect;
— Застарений Даррен

Чому це неможливо?
— apex39

151

Я нарешті знайшов виправлення для цього!

Як ми з’ясували, IB не дозволяє нам змінювати висоту стилю окантованого кута. Тому змініть його на будь-який з інших стилів і встановіть потрібну висоту. У коді змініть стиль межі назад.

textField.borderStyle = UITextBorderStyleRoundedRect;

Хороший трюк, але як ви можете дозволити багато рядкове представлення тексту?
— Люсьєн

7
@Lucien - Чи не це буде TextArea, а не текстове поле
— Крейг,

Мені це подобається ще краще, тому що я все ще можу використовувати дизайнер.
— RiddlerDev

Переконайтесь, що це робиться всередині viewWillLayoutSubviews. Я додав зображення до leftViewтекстового поля та деякого тексту, і коли це робиться, viewDidLoadвони обоє дивно розтягуються.

Для використання Swift 3.0textField.borderStyle = .RoundedRect
— Geoherna

85

Якщо ви використовуєте автоматичний макет, ви можете зробити це на дошці Story.

Додайте обмеження висоти в текстове поле, а потім змініть константу обмеження висоти на будь-яке бажане значення. Кроки показані нижче:

Крок 1: Створіть обмеження висоти для текстового поля

введіть тут опис зображення

Крок 2: Виберіть обмеження висоти

введіть тут опис зображення

Крок 3: Змінення постійного значення обмеження висоти

введіть тут опис зображення


Це спрацювало, але я отримав це нове попередження, будь-які ідеї: Позиція неоднозначна для "Текстового поля круглих стилів"
— Ескароут

Якщо він говорить, що "Позиція" неоднозначна, то це означає, що у вас може не виникнути обмеження для позиціонування об'єкта UITextField. Чи можете ви спробувати додати обмеження для визначення х та у. Наприклад, ви можете додати проміжне обмеження простору (для x), а ви можете додати вертикальне обмеження простору зверху.
— користувач1046037

stackoverflow.com/questions/21295136/… коли я це робив, я додав екран друку
— Esqarrouth

Порада для пошуку правильного обмеження висоти для використовуваного шрифту: Встановіть borderStyleусе, крім округленого. Використовуйте, Editor -> Size to Fit Contentщоб макет робив свою справу. Використовуйте інспектор нерухомості на своєму, UITextFieldщоб перевірити його висоту. Використовуйте це, щоб встановити обмеження висоти, і тепер ви можете змінити borderStyleспинку на округлу.
— Бенджон

Чи можу я це робити програмно?
— LKM

30

1.) Змініть стиль межі в InterfaceBuilder.

введіть тут опис зображення

2.) Після цього ви можете змінити розмір.

введіть тут опис зображення

3.) Створіть IBOutlet у своєму TextField та введіть у свій код наступний код, viewDidLoad()щоб змінити BorderStyle назад.

textField.borderStyle = UITextBorderStyleRoundedRect;

Швидкий 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Дякуємо @David Seek
— Vinoth Vino

29
  1. Виберіть стиль межі як не округлий

введіть тут опис зображення

  1. Встановіть свій зріст

введіть тут опис зображення

на ваш поглядWillAppear встановить кути як круглі

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

введіть тут опис зображення

  1. Насолоджуйтесь своїм круглим і високим UITextField

Чудово !! Це мені допомогло.
— Августин ПА

1
Це було чудово, це допомогло для швидких 3/4, які мені довелося використовувати, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
— Тоні Меррітт

1
Він змінився в UITextField.BorderStyle.roundedRect
— SMJ

14

Виконайте ці два простих кроки і отримайте збільшення висоти свого UItextField.

Крок 1: клацніть правою кнопкою миші файл XIB і відкрийте його, як у "вихідному коді".

Крок 2: Знайдіть те саме UITextfieldджерело і встановіть кадр так, як вам потрібно.

Ви можете скористатися цими кроками для зміни кадру будь-яких елементів управління яблуком.


1
Смішно, але це найкращий спосіб :)
— VisioN

4
Це не найкращий спосіб, коли ви думаєте про іншого програміста, який намагається знайти місце, де встановлено висоту
— bucherland

1
Це звучить як жахлива ідея. Ви повинні розглядати джерело XIB як приватну програму. Це може змінитися з-під вас у майбутній версії Xcode. Не кажучи вже про те, що ви приховали своє налаштування в останню чергу, будь-яка розумна людина буде шукати його в майбутньому.
— Майкл Петерсон

8

Оновлення для iOS 6: використовуючи автоматичну компоновку, навіть якщо ви все ще не можете встановити висоту UITextField від інспектора розміру в Builder інтерфейсу (як мінімум для Xcode 4.5 DP4), тепер можна встановити обмеження висоти на це, яке ви можете редагувати у програмі Interface Builder.

Крім того, якщо ви встановлюєте висоту кадру за кодом, автоматична компонування може скинути її залежно від інших обмежень, які може мати ваш погляд.


1
Це те, що я шукаю ... але як встановити обмеження висоти, щоб воно динамічно розширювало висоту на основі вмісту UITextField?
— jbandi

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (ширина: 1000, висота: 500)). roundedRect}} Я хочу, щоб мої текстові поля roundBorder регулювали їх висоту на основі адаптивного шрифту, який я встановлюю на них. Це працює в коробці на iOS 11, але зовсім не працює на iOS 9,10. Я використовую такий код:
— PhoneyDeveloper

6

Я знаю це старе питання, але я просто хотів додати, якщо ви хочете легко змінити висоту UITextField зсередини IB, а потім просто змінити тип межі UITextfield на будь-що інше, ніж тип закругленого кута за замовчуванням. Тоді ви можете легко розтягнути або змінити атрибути висоти зсередини редактора.


4

стрімкий3

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

Інтерфейс Builder

  • Замініть UITextFieldна BigTextField.
  • Змініть Border Style на none.

Це, безумовно, найкраще рішення.
— ilovebigmacs

3

Мій жалюгідний внесок у цю тупу проблему. У IB встановіть стиль none, щоб ви могли встановити висоту, тоді в IB встановити клас як підклас, UITextFieldщо змушує стиль бути округлим прямо.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Мені це не доводилося зламати файл XIB або код стилю написання в моєму контролері перегляду.



2

Висота UITextField не може регулюватися в інспекторі атрибутів лише тоді, коли він має стиль закруглених кутів за замовчуванням, але додає обмеження по висоті (плюс будь-які інші обмеження, необхідні для задоволення системи автоматичного вимикання - часто шляхом простого додавання до нього відсутніх обмежень) та регулювання обмеження регулює висоту текстового поля. Якщо ви не хочете обмежень, обмеження можна буде видалити (Очистити обмеження), а текстове поле залишиться на заданій висоті.

Працює як шарм.



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 і змініть його кадр там, де ви хочете це зробити у своєму коді.

Щасливе кодування!


2
Це небезпечна і застаріла відповідь. Використання глобальної змінної є жахливою практикою, враховуючи, що вона переживе вигляд, а жорстке кодування розміру не буде добре масштабуватися з гнучкими макетами.
— Кріс Коновер

1

Якщо ви створюєте багато, UITextFieldsце може бути швидше підклас UITextViews і замінити метод setFrame

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

Таким чином можна просто зателефонувати
[customTextField setFrame:<rect>];


0

У мене виникло те саме питання. тут спробували деякі рішення, а не робили все це мамбо-джамбо. Я встановив, що достатньо встановити обмеження висоти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.