static void InstallEqual(NSLayoutAttribute attribute, UIView first, UIView second)
		{
			UIView commonAncestor = AssertCommonAncestor (first, second);

			var c = CreateEqual (attribute, first, second);
			commonAncestor.AddConstraint (c);
		}
Example #2
0
 public FluentLayout(UIView view,
                     NSLayoutAttribute attribute,
                     NSLayoutRelation relation,
                     float constant = 0f)
 {
     View = view;
     Attribute = attribute;
     Relation = relation;
     Multiplier = 1f;
     Constant = constant;
 }
        public FluentLayout(UIView view,
                            NSLayoutAttribute attribute,
                            NSLayoutRelation relation,
							nfloat constant = default(nfloat))
        {
            View = view;
            Attribute = attribute;
            Relation = relation;
            Multiplier = 1f;
            Constant = constant;
            Priority = (float) UILayoutPriority.Required;
        }
Example #4
0
 public FluentLayout(
     UIView view,
     NSLayoutAttribute attribute,
     NSLayoutRelation relation,
     NSObject secondItem,
     NSLayoutAttribute secondAttribute)
 {
     View = view;
     Attribute = attribute;
     Relation = relation;
     SecondItem = secondItem;
     SecondAttribute = secondAttribute;
     Multiplier = 1f;
 }
 public FluentLayout(
     UIView view,
     NSLayoutAttribute attribute,
     NSLayoutRelation relation,
     NSObject secondItem,
     NSLayoutAttribute secondAttribute)
 {
     View = view;
     Attribute = attribute;
     Relation = relation;
     SecondItem = secondItem;
     SecondAttribute = secondAttribute;
     Multiplier = 1f;
     Priority = (float) UILayoutPriority.Required;
 }
Example #6
0
        static Tuple <UIView, NSLayoutAttribute, float, float> GetRight(Expression expr)
        {
            var r = expr;

            UIView            view = null;
            NSLayoutAttribute attr = NSLayoutAttribute.NoAttribute;
            var mul = 1.0f;
            var add = 0.0f;
            var pos = true;

            if (r.NodeType == ExpressionType.Add || r.NodeType == ExpressionType.Subtract)
            {
                var rb = (BinaryExpression)r;
                if (IsConstant(rb.Left))
                {
                    add = ConstantValue(rb.Left);
                    if (r.NodeType == ExpressionType.Subtract)
                    {
                        pos = false;
                    }
                    r = rb.Right;
                }
                else if (IsConstant(rb.Right))
                {
                    add = ConstantValue(rb.Right);
                    if (r.NodeType == ExpressionType.Subtract)
                    {
                        add = -add;
                    }
                    r = rb.Left;
                }
                else
                {
                    throw new NotSupportedException("Addition only supports constants: " + rb.Right.NodeType);
                }
            }

            if (r.NodeType == ExpressionType.Multiply)
            {
                var rb = (BinaryExpression)r;
                if (IsConstant(rb.Left))
                {
                    mul = ConstantValue(rb.Left);
                    r   = rb.Right;
                }
                else if (IsConstant(rb.Right))
                {
                    mul = ConstantValue(rb.Right);
                    r   = rb.Left;
                }
                else
                {
                    throw new NotSupportedException("Multiplication only supports constants.");
                }
            }

            if (IsConstant(r))
            {
                add = Convert.ToSingle(Eval(r));
            }
            else if (r.NodeType == ExpressionType.MemberAccess || r.NodeType == ExpressionType.Call)
            {
                var t = GetViewAndAttribute(r);
                view = t.Item1;
                attr = t.Item2;
            }
            else
            {
                throw new NotSupportedException("Unsupported layout expression node type " + r.NodeType);
            }

            if (!pos)
            {
                mul = -mul;
            }

            return(Tuple.Create(view, attr, mul, add));
        }
Example #7
0
 static NSLayoutConstraint SetLE(NSLayoutAttribute attribute, UIView view, nfloat value)
 {
     return(NSLayoutConstraint.Create(view, attribute, NSLayoutRelation.LessThanOrEqual, null, NSLayoutAttribute.NoAttribute, 0, value));
 }
Example #8
0
 static NSLayoutConstraint Set(NSLayoutAttribute attribute, UIView first, UIView second, float constant)
 {
     return(NSLayoutConstraint.Create(first, attribute, NSLayoutRelation.Equal, second, attribute, 1, constant));
 }
 public UIViewAndLayoutAttribute(UIView view, NSLayoutAttribute attribute)
 {
     Attribute = attribute;
     View = view;
 }
Example #10
0
 void addEdgeConstraint(NSLayoutAttribute edge, NSView parentView, NSView subView)
 {
     var constraint = NSLayoutConstraint.Create(subView, edge, NSLayoutRelation.Equal, parentView, edge, 1, 0);
     parentView.AddConstraint(constraint);
 }
Example #11
0
		public static NSLayoutConstraint Create (NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation)
		{
			return NSLayoutConstraint.Create (view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, 1.0f, 0f);
		}
Example #12
0
        void addEdgeConstraint(NSLayoutAttribute edge, NSView parentView, NSView subView)
        {
            var constraint = NSLayoutConstraint.Create(subView, edge, NSLayoutRelation.Equal, parentView, edge, 1, 0);

            parentView.AddConstraint(constraint);
        }
Example #13
0
		static NSLayoutConstraint CreateEqual(NSLayoutAttribute attribute, UIView refView, UIView view, float constant = 0)
		{
			return NSLayoutConstraint.Create (view, attribute, NSLayoutRelation.Equal, refView, attribute, 1, constant);
		}
Example #14
0
		static NSLayoutConstraint SetLE(NSLayoutAttribute attribute, UIView view, nfloat value)
		{
			return NSLayoutConstraint.Create (view, attribute, NSLayoutRelation.LessThanOrEqual, null, NSLayoutAttribute.NoAttribute, 0, value);
		}
        private static void ClearConstraint(UIView view, NSLayoutAttribute attribute)
        {
            NSLayoutConstraint constraint = GetConstraint(view, view.Superview, attribute);

            constraint?.Clear(false);
        }
Example #16
0
 public UIViewAndLayoutAttribute(UIView view, NSLayoutAttribute attribute)
 {
     Attribute = attribute;
     View      = view;
 }
        private static void DetermineConstraintInformationFromExpression(
            Expression expression,
            out MethodCallExpression methodCallExpression,
            out UIView view,
            out NSLayoutAttribute layoutAttribute,
            bool throwOnError = true)
        {
            methodCallExpression = FindExpressionOfType <MethodCallExpression>(expression);

            if (methodCallExpression == null)
            {
                if (throwOnError)
                {
                    throw new NotSupportedException("Constraint expression must be a method call.");
                }
                else
                {
                    view            = null;
                    layoutAttribute = default(NSLayoutAttribute);
                    return;
                }
            }

            layoutAttribute = NSLayoutAttribute.NoAttribute;

            switch (methodCallExpression.Method.Name)
            {
            case nameof(LayoutExtensions.Width):
                layoutAttribute = NSLayoutAttribute.Width;
                break;

            case nameof(LayoutExtensions.Height):
                layoutAttribute = NSLayoutAttribute.Height;
                break;

            case nameof(LayoutExtensions.Left):
            case nameof(LayoutExtensions.X):
                layoutAttribute = NSLayoutAttribute.Left;
                break;

            case nameof(LayoutExtensions.Top):
            case nameof(LayoutExtensions.Y):
                layoutAttribute = NSLayoutAttribute.Top;
                break;

            case nameof(LayoutExtensions.Right):
                layoutAttribute = NSLayoutAttribute.Right;
                break;

            case nameof(LayoutExtensions.Bottom):
                layoutAttribute = NSLayoutAttribute.Bottom;
                break;

            case nameof(LayoutExtensions.CenterX):
                layoutAttribute = NSLayoutAttribute.CenterX;
                break;

            case nameof(LayoutExtensions.CenterY):
                layoutAttribute = NSLayoutAttribute.CenterY;
                break;

            case nameof(LayoutExtensions.Baseline):
                layoutAttribute = NSLayoutAttribute.Baseline;
                break;

            case nameof(LayoutExtensions.Leading):
                layoutAttribute = NSLayoutAttribute.Leading;
                break;

            case nameof(LayoutExtensions.Trailing):
                layoutAttribute = NSLayoutAttribute.Trailing;
                break;

            default:
                if (throwOnError)
                {
                    throw new NotSupportedException("Method call '" + methodCallExpression.Method.Name + "' is not recognized as a valid constraint.");
                }
                break;
            }

            if (methodCallExpression.Arguments.Count != 1)
            {
                if (throwOnError)
                {
                    throw new NotSupportedException("Method call '" + methodCallExpression.Method.Name + "' has " + methodCallExpression.Arguments.Count + " arguments, where only 1 is allowed.");
                }
                else
                {
                    view = null;
                    return;
                }
            }

            var viewExpression = methodCallExpression.Arguments.FirstOrDefault() as MemberExpression;

            if (viewExpression == null)
            {
                if (throwOnError)
                {
                    throw new NotSupportedException("The argument to method call '" + methodCallExpression.Method.Name + "' must be a member expression that resolves to the view being constrained.");
                }
                else
                {
                    view = null;
                    return;
                }
            }

            view = Evaluate <UIView>(viewExpression);

            if (view == null)
            {
                if (throwOnError)
                {
                    throw new NotSupportedException("The argument to method call '" + methodCallExpression.Method.Name + "' resolved to null, so the view to be constrained could not be determined.");
                }
                else
                {
                    view = null;
                    return;
                }
            }
        }
 private static NSString GetDeactivatedConstraintKey(NSLayoutAttribute attribute)
 {
     return(attribute == NSLayoutAttribute.Right ? DeactivatedConstraintRight : DeactivatedConstraintBottom);
 }
 private static NSLayoutConstraint GetConstraint(UIView view, UIView constraintView, NSLayoutAttribute attribute)
 {
     return(constraintView.Constraints.FirstOrDefault(
                constraint => constraint.FirstItem.Equals(view) && constraint.FirstAttribute == attribute));
 }
		NSLayoutConstraint SetConstant(UIView view, NSLayoutAttribute attr, nfloat value)
		{
			var c =  NSLayoutConstraint.Create (view, attr, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, value);
			view.AddConstraint (c);

			return c;
		}
Example #21
0
 public static UIViewAndLayoutAttribute WithLayoutAttribute(this UIView view, NSLayoutAttribute attribute)
 {
     return(new UIViewAndLayoutAttribute(view, attribute));
 }
Example #22
0
		static NSLayoutConstraint Set(NSLayoutAttribute attribute, UIView first, UIView second, float constant)
		{
			return NSLayoutConstraint.Create (first, attribute, NSLayoutRelation.Equal, second, attribute, 1, constant);
		}
Example #23
0
 public Dimension(Context context, UIView view, NSLayoutAttribute attribute)
 {
     View      = view;
     Context   = context;
     Attribute = attribute;
 }
Example #24
0
		public static NSLayoutConstraint Create (NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation, nfloat multiplier, nfloat constant)
		{
			return NSLayoutConstraint.Create (view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, multiplier, constant);
		}
 public static NSLayoutConstraint Create(NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation, nfloat multiplier, nfloat constant)
 {
     return(NSLayoutConstraint.Create(view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, multiplier, constant));
 }
Example #26
0
 // This solves the duplicate selector export problem while not breaking the API.
 public static NSLayoutConstraint Create(NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation, 
     NSObject view2, NSLayoutAttribute attribute2, nfloat multiplier, nfloat constant)
 {
     return Create ((INativeObject) view1, attribute1, relation, view2, attribute2, multiplier, constant);
 }
 public static NSLayoutConstraint Create(NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation)
 {
     return(NSLayoutConstraint.Create(view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, 1.0f, 0f));
 }
		static NSLayoutConstraint CreateEqual(NSLayoutAttribute attribute, UIView first, UIView second)
		{
			return NSLayoutConstraint.Create (first, attribute, NSLayoutRelation.Equal, second, attribute, 1, 0);
		}
 // This solves the duplicate selector export problem while not breaking the API.
 public static NSLayoutConstraint Create(NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation,
                                         NSObject view2, NSLayoutAttribute attribute2, nfloat multiplier, nfloat constant)
 {
     return(Create((INativeObject)view1, attribute1, relation, view2, attribute2, multiplier, constant));
 }
 public static UIViewAndLayoutAttribute WithLayoutAttribute(this UIView view, NSLayoutAttribute attribute)
 {
     return new UIViewAndLayoutAttribute(view, attribute);
 }
Example #31
0
 internal Edge(Context context, UIView view, NSLayoutAttribute attribute)
 {
     View = view;
     Context = context;
     Attribute = attribute;
 }
Example #32
0
 private FluentLayout SetSecondItem(NSObject view2, NSLayoutAttribute attribute2)
 {
     ThrowIfSecondItemAlreadySet();
     SecondAttribute = attribute2;
     SecondItem = view2;
     return this;
 }
Example #33
0
 public static UIViewAndLayoutAttribute WithLayoutAttribute(this UIView view, NSLayoutAttribute attribute) => new UIViewAndLayoutAttribute(view, attribute);
Example #34
0
        public static UIView WithConstraint(this UIView constrainedView, UIView view, NSLayoutAttribute attribute, NSLayoutRelation relation, nfloat multiplier, nfloat constant, [CallerMemberName] string identifier = "", float?priority = null)
        {
            if (view != null && view != constrainedView)
            {
                view.TranslatesAutoresizingMaskIntoConstraints = false;
            }

            var constraint = NSLayoutConstraint.Create(view, attribute, relation, multiplier, constant);

            if (!string.IsNullOrEmpty(identifier))
            {
                constraint.SetIdentifier(identifier);
            }

            if (priority.HasValue)
            {
                constraint.Priority = priority.Value;
            }

            constrainedView.AddConstraint(constraint);
            return(constrainedView);
        }
Example #35
0
 static NSLayoutConstraint CreateEqual(NSLayoutAttribute attribute, UIView refView, UIView view, float constant = 0)
 {
     return(NSLayoutConstraint.Create(view, attribute, NSLayoutRelation.Equal, refView, attribute, 1, constant));
 }