Удалить ограничение равной ширины и изменить размер кнопки - PullRequest
0 голосов
/ 03 октября 2018

У меня в приложении две кнопки с одинаковым ограничением ширины.

enter image description here

Мне нужно скрыть правую кнопку и изменить размер левойодин на всю ширину экрана.

Я пробовал следующее (ни один из которых не работал):

  1. Скройте правую кнопку, удалите ограничение равной ширинызатем программно измените размер рамки левой кнопки и, наконец, вызовите setNeedsUpdateConstraints.Полный код ниже:

    self.btnRight.hidden = YES;
    
    [self.view removeConstraint:_btnWidthEqualConstraint];
    
     CGRect buttonFrame = self.btnLeft.frame;
     buttonFrame.size = CGSizeMake(300, 70);
     self.btnLeft.frame = buttonFrame;
    
     [self.btnLeft setNeedsUpdateConstraints]; 
    
  2. Обновите ограничения:

    UIScreen *screen = [UIScreen mainScreen];
    CGRect screenSize = screen.bounds;
    self.btnRight.hidden = YES;
    [self.btnRight updateConstraints:^(MASConstraintMaker *make) {
      make.width.equalTo(@(0));
    }];
    [self.btnLeft updateConstraints:^(MASConstraintMaker *make) {
        make.width.equalTo(@(screenSize.size.width-12));
    }];
    

Как скрыть правую кнопку и изменить размер левойодин на всю ширину экрана?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Пожалуйста, используйте @property CGFloat constant, чтобы обновить ограничения.

Чтобы скрыть правую кнопку:

_btnWidthEqualConstraint.constant = UIScreen.mainScreen.bounds.size.width - _btnLeftLeading.constant - _btnRightTrailing.constant;
_spacing.constant = 0; 

Чтобы отобразить правую кнопку:

_btnWidthEqualConstraint.constant = 0;
_spacingBetweenBtns.constant = 8; //Specify the spacing between two buttons

Пожалуйста, убедитесь, чточто _btnWidthEqualConstraint должен быть реализован вот так

0 голосов
/ 03 октября 2018

Используйте UIStackView со следующей настройкой:

let leftButton = UIButton(type: .system)
let rightButton = UIButton(type: .system)

let stackView = UIStackView(arrangedSubviews: [leftButton, rightButton])
stackView.axis = .horizontal
stackView.alignment = .fill
stackView.distribution = .fillEqually
stackView.spacing = 8 // or whatever spacing you wish to have between the buttons

Тогда вы можете просто скрыть одну кнопку (leftButton.isHidden = true), а другая займет всю ширину.

Конечно, вы также можете выполнить всю настройку в конструкторе интерфейсов.

...