2015-08-02 2 views
-3

Я хочу сделать это программно без интерфейса Builder. Я хочу добавить UITextField в приложение iOS на постоянное расстояние от нижней части окна приложения. Я рассмотрел множество существующих вопросов и ответов. В Swift нет ни одного, и эта тема кажется относительно не документированной.Swift: программное добавление поля в позицию относительно нижней части окна

+0

Программно или через IB? Для этого есть два простых способа. – Caleb

+0

Программно. Я отредактировал вопрос, чтобы отразить это. – Whosyourjay

ответ

3

Есть несколько несколько связанных ответы там, но здесь все части потребовалось, чтобы получить эту работу:

1) Мне нужно создать ограничение как

let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint 

Это использует домен Свифта специфический язык «язык визуального формата» (VFL): V:[inputBox]-50-|, где «V» означает вертикальный, 50 - это число пикселей, а «|» - относится к нижней части родительского представления.

2) UITextField должен был быть добавлен в представление перед добавлением ограничения в представление, поэтому '|' выше может найти родительский вид.

3) Как только я использовал один NSLayoutConstraint, мне пришлось использовать их для всех аспектов калибровки и позиционирования для этого элемента. Поэтому мне пришлось добавить эти две строки, чтобы описать его ширину и высоту:

let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint 
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint 

4) Для того, чтобы получить мой UITextField правильно взаимодействовать с ЛВЖ мне пришлось добавить эту строку:

inputBox.setTranslatesAutoresizingMaskIntoConstraints(false) 

Собираем все вместе:

let inputBox = UITextField(frame: rect) 
inputBox.backgroundColor = UIColor.yellowColor() 
inputBox.setTranslatesAutoresizingMaskIntoConstraints(false) 
self.view.addSubview(inputBox) 

let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint 
let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint 
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint 

view.addConstraint(bottomConstraint) 
view.addConstraint(heightConstraint) 
view.addConstraint(widthConstraint) 
Смежные вопросы