Как установить высоту UITextField?


130

Я использую UITextField. Я хочу увеличить его высоту, но не нашел для этого возможности. Как мне этого добиться?

Ответы:


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

4
намного проще открыть .xib в качестве источника, найти ur 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 06

151

Я наконец нашел исправление для этого!

Как мы обнаружили, IB не позволяет нам изменять высоту стиля границы с закругленными углами. Поэтому измените его на любой из других стилей и установите желаемую высоту. В коде измените стиль границы обратно.

textField.borderStyle = UITextBorderStyleRoundedRect;

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

7
@ Люсьен - Разве это не было бы TextArea, а не текстового поля
— Крейг

Мне это нравится даже больше, потому что я все еще могу использовать конструктор.
— RiddlerDev

Убедитесь, что это сделано внутри viewWillLayoutSubviews. Я добавил изображение в leftViewтекстовое поле и немного текста, и когда это было сделано, viewDidLoadони оба странно растягиваются.

Для Swift 3.0 используйтеtextField.borderStyle = .RoundedRect
— Geoherna

85

Если вы используете Auto Layout, вы можете сделать это на Раскадровке.

Добавьте ограничение высоты в текстовое поле, затем измените константу ограничения высоты на любое желаемое значение. Шаги показаны ниже:

Шаг 1. Создайте ограничение по высоте для текстового поля

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

Шаг 2: выберите ограничение высоты

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

Шаг 3. Измените постоянное значение ограничения высоты

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


Это сработало, но я получил это новое предупреждение, любые идеи: неоднозначная позиция для «Круглого текстового поля»
— Esqarrouth

Если он говорит, что «Позиция неоднозначна», это означает, что у вас может не быть ограничения для размещения объекта 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;

Свифт 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Спасибо @David Seek
— Vinoth Vino 08

29
  1. Выберите стиль границы без закруглений

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

  1. Установите свой рост

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

на ваш взглядWillAppear установит углы как круглые

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

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

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

Большой!! Мне это помогло.
— Августин PA

1
Это было здорово, это помогло для быстрого 3/4, который мне пришлось использовать, ...... yourTextField.borderStyle = UITextBorderStyle.oundedRect
— Тони Мерритт

1
Он изменился на UITextField.BorderStyle.oundedRect
— smj

14

Выполните эти два простых шага и увеличьте свой рост UItextField.

Шаг 1: щелкните правой кнопкой мыши файл XIB и откройте его, как в «Исходном коде».

Шаг 2: Найдите тот же UITextfieldисточник и установите рамку по своему усмотрению.

Вы можете использовать эти шаги, чтобы изменить рамку любых элементов управления Apple.


1
Забавно, но это лучший способ :)
— VisioN

4
Это не лучший способ, когда вы думаете о другом программисте, пытающемся найти, где установлена ​​высота
— bucherland

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

8

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

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


1
Это то, что я ищу ... но как мне установить ограничение высоты, чтобы оно увеличивало высоту динамически на основе содержимого UITextField?
— jbandi

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

6

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


4

swift3

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

Интерфейсный Разработчик

  • Заменить UITextFieldнаBigTextField .
  • Изменение Border Style To none.

Это, безусловно, лучшее решение.
— ilovebigmacs 02

3

Мой жалкий вклад в эту глупую проблему. В IB установите для стиля значение none, чтобы вы могли установить высоту, затем в IB установите класс как подкласс, UITextFieldкоторый заставляет стиль округляться до прямоугольника.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Это избавило меня от необходимости взламывать файл XIB или писать код стиля в моем контроллере представления.



2

Высота UITextField не регулируется в Attributes Inspector только в том случае, если у него есть стиль границы по умолчанию с закругленными углами, но добавляется ограничение высоты (плюс любые другие ограничения, которые требуются для удовлетворения системы автоматического размещения - часто просто используя Добавить отсутствующие ограничения) к нему и регулировка ограничения изменит высоту текстового поля. Если вам не нужны ограничения, их можно удалить (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);

Объявите свое текстовое поле как глобальное свойство и измените его фрейм, где бы вы ни захотели сделать это в своем коде.

Удачного кодирования!


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.