Подтвердить что ты не робот

IOS NSLayoutConstraint Фиксированная ширина с использованием constraintWithItem

Я хотел бы установить ограничение, чтобы программным образом присвоить UIButton фиксированную (постоянную) ширину. Я знаю, что могу сделать это с ограничениями с VisualFormat, но я использовал constraintWithItem для всех моих ограничений в коде. Я задавался вопросом ради любопытства/согласованности, если бы был какой-то способ сделать это с помощью ограничения на элемент с .Item.

4b9b3361

Ответ 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))

Ответ 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