У меня есть ViewController
класса, который имеет переменную textField
, который сконфигурирован , когда он установлен в viewDidLoad
способе ViewController
.Обновления autolayout ограничения в зависимости от ориентации
class ViewController: UIViewController {
weak var textField: UITextField! {
didSet {
textField.delegate = self
textField.placeholder = "Enter Text"
view.addSubview(textField)
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 0.80, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 0.05, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0))
}
}
override func viewDidLoad() {
super.viewDidLoad()
textField = UITextField()
}
}
В список добавлен набор ограничений автоматической компоновки. Я хочу это текстовое поле быть центрированы в середине (.CenterX
и .CenterY
), чтобы быть 80% (5%), ширина (высота) из view
рассчитывается в портрет режиме ViewController
«ы.
Если ориентация устройства (UIDevice.currentDevice().orientation
) поворачиваются в альбомной ориентации, или представлена от альбомной ориентации, я хочу ширину (высота) оставаться такими же, как для портретной ориентации.
Изменение attribute
для toItem
в:
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 0.05, constant: 0))
к:
attribute: (UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation) ? .Height : .Width)
Не делать трюк, как я предполагаю, что textField
не получает (повторно) устанавливается, когда устройство переключает ориентацию. Кроме того, эта проверка кажется немного сложной для Swift. Я пропустил трюк с автозапуском?
Хорошее место - спасибо. – Alex
@Alex Ваше приветствие. Если вам нужен более простой способ борьбы с программным ограничением, то посмотрите -https: //github.com/keshavvishwkarma/KVConstraintExtensionsMaster –
Я все еще не уверен, что если указать ограничения в относительном процентном коэффициенте, это лучший подход? Таким образом, ваши подходы не зависят от модели iPhone, скажем. Думаю, это похоже на CSS. Любые мысли по этому поводу? Благодарю. – Alex