如何与约束水平对齐?

时间:2019-12-04 17:28:02

标签: c# ios xamarin

我如何水平对齐三个元素[A B C]并使其一个又一个受约束?

public static void AddConstraintsElements(UIView View, UIView element, UIView element2, UIView element3)
        {
            NSLayoutConstraint.ActivateConstraints(new[] {
                element.TopAnchor.ConstraintGreaterThanOrEqualTo(View.TopAnchor, constant: 20),
                element.LeadingAnchor.ConstraintGreaterThanOrEqualTo(View.LeadingAnchor, constant: 100),
                element.WidthAnchor.ConstraintGreaterThanOrEqualTo(View.WidthAnchor, 1),
                element.HeightAnchor.ConstraintGreaterThanOrEqualTo(View.HeightAnchor, 1),

                element2.BottomAnchor.ConstraintGreaterThanOrEqualTo(View.TopAnchor, constant: 20),
                element2.TrailingAnchor.ConstraintGreaterThanOrEqualTo(View.LeadingAnchor, constant: 120),
                element2.WidthAnchor.ConstraintGreaterThanOrEqualTo( 1),
                element2.HeightAnchor.ConstraintGreaterThanOrEqualTo( 1),

                element3.BottomAnchor.ConstraintGreaterThanOrEqualTo(View.TopAnchor, constant: 20),
                element3.TrailingAnchor.ConstraintGreaterThanOrEqualTo(View.LeadingAnchor, constant: 120),
                element3.WidthAnchor.ConstraintGreaterThanOrEqualTo( 1),
                element3.HeightAnchor.ConstraintGreaterThanOrEqualTo( 1)
            });
        }

enter image description here

其他具有第一和第二要素的情况,请删除第三要素 :

enter image description here

我尝试了,但是没用

element1.WidthAnchor.ConstraintEqualTo(25).Active = true;
            element1.HeightAnchor.ConstraintEqualTo(element1.WidthAnchor).Active = true;

            element2.WidthAnchor.ConstraintEqualTo(30).Active = true;
            element2.HeightAnchor.ConstraintEqualTo(30).Active = true;



            element1.TrailingAnchor.ConstraintEqualTo(element2.LeadingAnchor).Active = true;

            element1.TopAnchor.ConstraintEqualTo(View.TopAnchor, 15).Active = true;
            element2.TopAnchor.ConstraintEqualTo(View.TopAnchor, 15).Active = true;

            element1.LeftAnchor.ConstraintEqualTo( View.CenterXAnchor).Active = true;
            element2.RightAnchor.ConstraintEqualTo(View.RightAnchor).Active = true;

2 个答案:

答案 0 :(得分:2)

假设您想将它们对齐:

+-----------------------------------------------+
|                       ^                       |
|                      120                      |
|                       v                       |
|       +---------++---------++---------+       |
|       |         ||         ||         |       |
|       |    A    ||    B    ||    C    |       |
|       |         ||         ||         |       |
|       +---------++---------++---------+       |
|                                               |
|                                               |
|                                               |

项目居中放置,从顶部开始指向120个点,并且它们的宽度和高度固定。您可以执行以下操作:

// set widths and heights
a.WidthAnchor.ConstraintEqualTo(25).Active = true;
a.HeightAnchor.ConstraintEqualTo(a.WidthAnchor).Active = true;

b.WidthAnchor.ConstraintEqualTo(25).Active = true;
b.HeightAnchor.ConstraintEqualTo(b.WidthAnchor).Active = true;

c.WidthAnchor.ConstraintEqualTo(25).Active = true;
c.HeightAnchor.ConstraintEqualTo(c.WidthAnchor).Active = true;

// align B view as the middle view
b.CenterXAnchor.ConstraintEqualTo(View.CenterXAnchor).Active = true;

// align A to left of B
a.TrailingAnchor.ConstraintEqualTo(b.LeadingAnchor).Active = true;

// align C to right of B
c.LeadingAnchor.ConstraintEqualTo(b.TrailingAnchor).Active = true;

// align A, B and C, 120 points from the top
a.TopAnchor.ConstraintEqualTo(View.TopAnchor, 120).Active = true;
b.TopAnchor.ConstraintEqualTo(View.TopAnchor, 120).Active = true;
c.TopAnchor.ConstraintEqualTo(View.TopAnchor, 120).Active = true;

答案 1 :(得分:1)

我将居中对齐B,然后将宽度设置为首选高度,然后将A和C匹配到B的宽度,高度和垂直方向,并将A和C相对于B的水平方向匹配为首选。

所以

B->宽度,高度,垂直,水平

A->将宽度与B匹配,将高度与B匹配,将垂直与B匹配,参照B的位置(例如-15或类似位置)设置“水平”

C->将宽度与B匹配,将高度与B匹配,将垂直与B匹配,参照B的位置(例如+15或类似值)设置“水平”