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