Як встановити висоту 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.