iOS Кнопка интерфейса не учитывает TopAnchor и HeightAnchor - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать UIViewController с двумя кнопками, расположенными вертикально в нижней части UIView (как на листе действий iOS на iPod). По какой-то причине верхний якорь моей верхней кнопки постоянно привязан к вершине UIViewController.

У меня есть нижняя кнопка для перемещения в нужное место в нижней части контроллера. Я добился этого, установив верхнюю привязку второй кнопки следующим образом:

NSLayoutConstraint.ActivateConstraints(new[] { this.secondButton.TopAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.BottomAnchor, -(this.secondButton.Frame.Height + 30f)) });
this.secondButton.UpdateConstraints();

Я пытался сделать что-то похожее и для первой кнопки. Я прошел через 2 случая, когда верхняя кнопка застряла на якоре the top.

  1. Установить верхний якорь с таким же типом логики c, как и для второй кнопки

    NSLayoutConstraint.ActivateConstraints(new[] { 
    this.firstButton.HeightAnchor.ConstraintEqualTo(this.firstButton.Frame.Height), 
    this.firstButton.TopAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.BottomAnchor, -(2 * this.secondButton.Frame.Height + 60f)) });
    this.firstButton.UpdateConstraints();
    

Результат:

Застрял верхний якорь 1

Установите нижнюю привязку для второй кнопки, переключив верхнюю линию привязки выше на эту

this.firstButton.BottomAnchor.ConstraintEqualTo(this.buttonTwo.TopAnchor, -30f)

Результат: Верхняя привязка застряла 2

Независимо от того, как я установил привязку высоты и верхнюю / нижнюю привязки для кнопки один, она не прекратит привязку к самой верхней части контроллера вида. Я удостоверился, что TranslatesAutoresizingMaskIntoConstraints был установлен в false для обеих кнопок, и я проверил, что не было никаких предыдущих ограничений на две кнопки. Любое понимание? Спасибо!

1 Ответ

0 голосов
/ 29 января 2020

Нам нужно увидеть все ограничения в вашем проекте, чтобы выяснить причину и решение. Я полагаю, вы не удаляете старые ограничения при добавлении нового ограничения.

Я написал вам пример для исправления двух кнопок внизу:

   public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.


        UIButton firstButton = new UIButton(UIButtonType.System);
        firstButton.SetTitle("first", UIControlState.Normal);
        firstButton.Layer.BorderColor = UIColor.Green.CGColor;
        firstButton.Layer.BorderWidth = 1.5f;
        View.Add(firstButton);

        UIButton secondButton = new UIButton(UIButtonType.System);
        secondButton.SetTitle("second", UIControlState.Normal);
        secondButton.SetTitleColor(UIColor.Red,UIControlState.Normal);
        secondButton.Layer.BorderColor = UIColor.Yellow.CGColor;
        secondButton.Layer.BorderWidth = 1.50f;
        View.Add(secondButton);

        firstButton.TranslatesAutoresizingMaskIntoConstraints = false;
        secondButton.TranslatesAutoresizingMaskIntoConstraints = false;

        View.AddConstraints(new[] {
            secondButton.HeightAnchor.ConstraintEqualTo(60),
            secondButton.BottomAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.BottomAnchor,0),
            secondButton.LeftAnchor.ConstraintEqualTo(View.LeftAnchor,20),
            secondButton.RightAnchor.ConstraintEqualTo(View.RightAnchor,-20),
        });

        View.AddConstraints(new[] {
            firstButton.HeightAnchor.ConstraintEqualTo(60),
            firstButton.BottomAnchor.ConstraintEqualTo(secondButton.TopAnchor,-30),
            firstButton.LeftAnchor.ConstraintEqualTo(View.LeftAnchor,20),
            firstButton.RightAnchor.ConstraintEqualTo(View.RightAnchor,-20),
        });
    }

И вот результат :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...