Вертикальное выравнивание UIStackView - PullRequest
0 голосов
/ 14 июля 2020

У меня есть вертикальный UIStackview с тремя элементами управления. Я хочу, чтобы все элементы управления были по центру, а первые два расширяли всю доступную ширину. Третий должен занимать 80% доступной ширины и также быть центрирован.

Вот результат, который я получил на данный момент:

введите описание изображения здесь

Как видите, третий элемент управления выровнен по левому краю.

Вот код, который у меня есть для всего этого:

    var container = new UIStackView
    {
        TranslatesAutoresizingMaskIntoConstraints = false,
        Axis = UILayoutConstraintAxis.Vertical,
        Distribution = UIStackViewDistribution.EqualCentering,
        Alignment = UIStackViewAlignment.Fill,
        Spacing = 10f
    };
    // Create the Title
    UILabel title = new UILabel
    {
        TranslatesAutoresizingMaskIntoConstraints = false,
        Text = item.name,
        TextAlignment = UITextAlignment.Center,
        Lines = 2,
    };
    
    container.AddArrangedSubview(title);
    
    // Create the gauge
    SFCircularGauge circularGauge = new SFCircularGauge { TranslatesAutoresizingMaskIntoConstraints = false };
    circularGauge.Tag = circularGauge.GenerateViewTag();
    circularGauge.HeightAnchor.ConstraintEqualTo(100f).Active = true;
#if DEBUG
    circularGauge.BackgroundColor = UIColor.Cyan;
#endif    
    container.AddArrangedSubview(circularGauge);
    
    // Add the evaluate button
    var evaluate = UIButton.FromType(UIButtonType.RoundedRect);
    evaluate.TranslatesAutoresizingMaskIntoConstraints = false;
    
    evaluate.SetTitle(Utilities.GetLocalizedString("qol_rate_button_text"), UIControlState.Normal);
    evaluate.SetTitleColor(UIColor.White, UIControlState.Normal);
    evaluate.BackgroundColor = new UIColor(red: 1.00f, green: 0.37f, blue: 0.00f, alpha: 1.0f); // Optimistic Orange
    evaluate.Layer.CornerRadius = 5f;
    evaluate.AutoresizingMask = UIViewAutoresizing.FlexibleWidth;
    evaluate.ContentEdgeInsets = new UIEdgeInsets(top: 0, left: 10f, bottom: 0, right: 10f);
    
    evaluate.UserInteractionEnabled = true;
    
    evaluate.TouchUpInside -= Evaluate_TouchUpInside;
    evaluate.TouchUpInside += Evaluate_TouchUpInside;
    
    evaluate.Tag = evaluate.GenerateViewTag();
    viewIdsAutoEvalsIds.Add((int)evaluate.Tag, item.id);
    
    container.AddArrangedSubview(evaluate);
    
    evaluate.WidthAnchor.ConstraintEqualTo(container.WidthAnchor, 0.8f).Active = true;
    evaluate.CenterXAnchor.ConstraintEqualTo(container.CenterXAnchor).Active = true;

Я не могу выяснить, где моя проблема. В конфигурации UIStackView? Где-нибудь еще?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 июля 2020

Это могло быть ошибкой управления. Мы увидим .

А пока, еще раз спасибо Reveal Tool, у шкалы нет определенной ширины.

Я решил проблему, установив ограничение ширины явно:

// Fix the width to be 100% of the container     
circularGauge.WidthAnchor.ConstraintEqualTo(container.WidthAnchor).Active = true;
0 голосов
/ 14 июля 2020

Свойство Выравнивание предназначено для установки выравнивания неаксиальных подвидов. В вашем случае вам нужно установить его как

UIStackViewAlignment.Center

вместо

UIStackViewAlignment.Fill
...