Как установить ограничение topAnchor относительно высоты суперпредставления - PullRequest
2 голосов
/ 01 февраля 2020

У меня есть два вида: toastView и view. toastView является подпредставлением view. Я хочу расположить toastView на оси Y на 80% от высоты view. Как я могу сделать это, используя константы в коде?

Я предположил, что есть такой метод:

[toastView.topAnchor constraintEqualToAnchor:view.heightAnchor multiplier:0.8].active = YES;

, но я не могу смешивать NSLayoutDimension (ширина и высота) и NSLayoutYAxisAnchor (X и Y)


Вот как это выглядит в дизайне:

scheme of how it looks on the design

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Хитрость здесь в том, чтобы установить top из toastView равным bottom из self.view с множителем из 0.8:

Объектив- C:

[NSLayoutConstraint constraintWithItem: toastView attribute: NSLayoutAttributeTop
    relatedBy: NSLayoutRelationEqual toItem: self.view
    attribute: NSLayoutAttributeBottom multiplier: 0.8 constant: 0].active = YES;

Swift:

NSLayoutConstraint(item: toastView, attribute: .top, relatedBy: .equal,
  toItem: self.view, attribute: .bottom, multiplier: 0.8, constant: 0).isActive = true
0 голосов
/ 01 февраля 2020

Вы можете сделать это так быстро:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let yConstraint = NSLayoutConstraint(item: toastView, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1, constant: view.bounds.height * 0.8 )
        NSLayoutConstraint.activateConstraints([yConstraint])
    }

Цель c

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    NSLayoutConstraint *topAnchorConstraint = [NSLayoutConstraint constraintWithItem:toastView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeTop multiplier:1 constant:(view.bounds.size.height * 0.8)];

    [self.view addConstraint:topAnchorConstraint];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...