UIButton ограничения программно - PullRequest
0 голосов
/ 15 февраля 2019

Я создал «первую кнопку» с использованием раскадровки и установил для нее ограничения, теперь я хочу программно создать еще одну кнопку и установить ее над первой кнопкой следующим образом: image of buttons

и я использую этот код, чтобы попытаться добиться этого:

  NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];


    NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];

    NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];

    NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];

    [self.view addConstraints:@[xConstraint,Yxonstraints,width,height]];

Однако вторая кнопка заканчивается посередине и слева и также меньше ее фактического размера, что я здесь не так делаю?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вам нужно

self.secondBu.translatesAutoresizingMaskIntoConstraints = false 
NSLayoutConstraint.activate([ 
    self.secondBu.bottomAnchor.constraint(equalTo: self.firstBu.topAnchor, constant:-15)  
    self.secondBu.leadingAnchor.constraint(equalTo: self.firstBu.leadingAnchor), 
    self.secondBu.trailingAnchor.constraint(equalTo: self.firstBu.trailingAnchor),
    self.secondBu.heightAnchor.constraint(equalTo: self.firstBu.heightAnchor)
])     

, но самый простой способ - вставить firstBu внутри UIStackView в раскадровке, а затем использовать 1 строку

self.stackView.insertArrangedSubview(secondBu,at:0)

. Вы можете установить для свойства stackView spacing значение15 также в IB, также избегайте использования addConstraints в соответствии с рекомендациями Apple и используйте NSLayoutConstraint.activate

0 голосов
/ 15 февраля 2019

Вы можете добиться того же, выполнив следующие шаги:

  • Добавьте новую кнопку на представлении в раскадровке с ограничениями в начале, в конце, снизу и высоте.
  • Прикрепленный IBOutlet для ограничения высоты и установите его в 0.
  • Добавьте строки ниже, где бы вы ни хотели добавить кнопку.

    self.buttonHeightConstant.constant = 50 self.view.layoutIfNeeded()

Будет установлено новое значение ограничения высоты, чтобы сделать его видимым, а во 2-й строке будут обновлены другие ограничения представления.

0 голосов
/ 15 февраля 2019
 NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];

Вы этого не хотите.Вы хотите, чтобы secondButton.top был пробелом для firstButton.bottom:

 NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...