Я хотел бы установить ограничение, чтобы программным образом присвоить UIButton фиксированную (постоянную) ширину. Я знаю, что могу сделать это с ограничениями с VisualFormat, но я использовал constraintWithItem для всех моих ограничений в коде. Я задавался вопросом ради любопытства/согласованности, если бы был какой-то способ сделать это с помощью ограничения на элемент с .Item.
IOS NSLayoutConstraint Фиксированная ширина с использованием constraintWithItem
Ответ 1
Нашел мое решение. Просто установите другой объект в nil, а другой атрибут NSLayoutAttributeNotAnAttribute (это было то, о чем я не думал), и используйте постоянный параметр для фиксированной ширины:
[self addConstraint:[NSLayoutConstraint constraintWithItem:myButton
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:200]];
Изменить: поскольку этот ответ все еще, кажется, получает справедливую долю просмотров, я думал, что добавлю синтаксис Swift:
self.addConstraint(NSLayoutConstraint(
item: myButton,
attribute: .width,
relatedBy: .equal,
toItem: nil,
attribute: .notAnAttribute,
multiplier: 1.0,
constant: 200))
Ответ 2
Как насчет использования Макеты компоновки?
myView.widthAnchor.constraintEqualToConstant(29).active = true
Ответ 3
Вот простой код для кнопки с фиксированной шириной.
визуальный формат: -
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H: [myButton(==50)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myButton)]];
Используйте этот код для ограничения, используя визуальный формат, где self.view - это ваш контроль над кнопками, а myButton - это имя вашей кнопки, а 50 - ширина myButton. Вы можете изменить эти значения в соответствии с желаемым ограничением.
constraintWithItem format: -
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute: NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:50.0]];
Используйте этот код для ограничения, используя формат constraintWithItem, где self.view - это ваш контроль над кнопками, а myButton - это имя вашей кнопки, а 50 - ширина myButton. Вы можете изменить эти значения в соответствии с желаемым ограничением.
Ответ 4
В быстрой:
let width = 120
let constraint = NSLayoutConstraint(
item: myView,
attribute: .Width,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1.0,
constant: width)
NSLayoutConstraint.activateConstraints([constraint])
Затем вы можете изменить значение константы константы
constraint.constant = width * 2
Ответ 5
Вместо того, чтобы искать явную высоту (28), лучшей идеей было бы искать ограничение height
...
loginButton.constraints.first(where: { $0.firstAttribute == .height })?.constant = 40