Example #1
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,
                     float constant = 0f)
 {
     View       = view;
     Attribute  = attribute;
     Relation   = relation;
     Multiplier = 1f;
     Constant   = constant;
 }
Example #3
0
 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;
 }
        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 #5
0
 public FluentLayout(UIView view,
                     NSLayoutAttribute attribute,
                     NSLayoutRelation relation,
                     nfloat constant = default(nfloat))
 {
     Constraint = new Lazy <NSLayoutConstraint>(CreateConstraint);
     View       = view;
     Attribute  = attribute;
     Relation   = relation;
     Constant   = constant;
     Priority   = (float)UILayoutPriority.Required;
 }
Example #6
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;
 }
 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 #9
0
 public FluentLayout(
     UIView view,
     NSLayoutAttribute attribute,
     NSLayoutRelation relation,
     NSObject secondItem,
     NSLayoutAttribute secondAttribute)
 {
     Constraint      = new Lazy <NSLayoutConstraint>(CreateConstraint);
     View            = view;
     Attribute       = attribute;
     Relation        = relation;
     SecondItem      = secondItem;
     SecondAttribute = secondAttribute;
     Priority        = (float)UILayoutPriority.Required;
 }
Example #10
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;
     Priority        = (float)UILayoutPriority.Required;
 }
Example #11
0
 public static NSLayoutConstraint [] PinTopRight(NSView view, NSView superView, float padding, NSLayoutRelation relation)
 {
     return(new NSLayoutConstraint []
     {
         NSLayoutConstraint.Create(view, NSLayoutAttribute.Right, relation, superView, NSLayoutAttribute.Right, 1.0f, padding),
         NSLayoutConstraint.Create(view, NSLayoutAttribute.Top, relation, superView, NSLayoutAttribute.Top, 1.0f, padding)
     });
 }
        public static NSLayoutConstraint SetCenterYContraintTo(this UIView childView, UIView superView, float margin = 0, NSLayoutRelation relation = NSLayoutRelation.Equal, int priority = 1000)
        {
            var constraint = NSLayoutConstraint.Create(superView, NSLayoutAttribute.CenterY, relation, childView, NSLayoutAttribute.CenterY, 1, margin);

            constraint.Priority = priority;
            superView.AddConstraint(constraint);

            return(constraint);
        }
Example #13
0
 public LayoutConstraint(LayoutConstraintItem itemA, NSLayoutAttribute attributeA, NSLayoutRelation relation, UIView itemB, NSLayoutAttribute attributeB, nfloat multiplier, nfloat constant)
 {
     _value = NSLayoutConstraint.Create(itemA.Value, attributeA, relation, itemB, attributeB, multiplier, constant);
 }
Example #14
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);
 }
Example #15
0
        /// <summary>
        /// A helper function that create a new constraint, add to given view and return the parent constraint to continue the chain method.
        /// </summary>
        private ParentConstraint AddNewConstraintToParent(UIView view, NSLayoutAttribute viewAttribute, NSLayoutRelation relation, UIView target, NSLayoutAttribute targetAttribute, float multiplier, float constant, float priority)
        {
            // create a new constraint
            var constraint = NSLayoutConstraint.Create(view, viewAttribute, relation, target, targetAttribute, multiplier, constant);

            constraint.Priority = priority;

            // add the new constraint to parent
            target.AddConstraint(constraint);

            // continue the chain
            return(this);
        }
Example #16
0
 public static NSLayoutConstraint PinFirstBaseline(NSView view, NSView superView, float padding, NSLayoutRelation relation)
 {
     return(NSLayoutConstraint.Create(view, NSLayoutAttribute.FirstBaseline, relation, superView, NSLayoutAttribute.FirstBaseline, 1.0f, padding));
 }
Example #17
0
 public static NSLayoutConstraint Create(NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation)
 {
     return(NSLayoutConstraint.Create(view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, 1.0f, 0f));
 }
 public static void SetCenterXContraintTo(this UIView childView, UIView superView, float margin = 0, NSLayoutRelation relation = NSLayoutRelation.Equal)
 {
     superView.AddConstraint(NSLayoutConstraint.Create(
                                 superView,
                                 NSLayoutAttribute.CenterX,
                                 relation,
                                 childView,
                                 NSLayoutAttribute.CenterX,
                                 1,
                                 margin));
 }
Example #19
0
        internal LayoutConstraint[] AddConstraint(ICompound from, ICompound to = null, Coefficients[] coefficients = null, NSLayoutRelation relation = default(NSLayoutRelation))
        {
            var results = new List <LayoutConstraint>();

            for (var i = 0; i < from.Properties.Length; i++)
            {
                var n = coefficients?[i] ?? new Coefficients();

                results.Add(AddConstraint(from.Properties[i], to: to?.Properties?[i], coefficients: n, relation: relation));
            }

            return(results.ToArray());
        }
Example #20
0
        internal LayoutConstraint AddConstraint(IProperty from, IProperty to = null, Coefficients coefficients = null, NSLayoutRelation relation = default(NSLayoutRelation))
        {
            if (coefficients == null)
            {
                coefficients = new Coefficients();
            }

            from.View.TranslatesAutoresizingMaskIntoConstraints = false;

            var constraint = NSLayoutConstraint.Create(
                from.View,
                from.Attribute,
                relation,
                to?.View,
                to?.Attribute ?? NSLayoutAttribute.NoAttribute,
                coefficients.Multiplier,
                coefficients.Constant
                );

            if (to == null)
            {
                _constraints.Add(new Constraint(from.View, constraint));
            }

            else
            {
                var common = from.View.ClosestCommonAncestor(to.View);

                if (common != null)
                {
                    _constraints.Add(new Constraint(common, constraint));
                }

                else
                {
                    throw new Exception($"No common superview found between ${from.View} and ${to.View}");
                }
            }

            return(constraint);
        }
Example #21
0
        internal LayoutConstraint AddConstraint(IProperty from, LayoutSupport to, Coefficients coefficients = null, NSLayoutRelation relation = default(NSLayoutRelation))
        {
            if (coefficients == null)
            {
                coefficients = new Coefficients();
            }

            from.View.TranslatesAutoresizingMaskIntoConstraints = false;

            var constraint = NSLayoutConstraint.Create(
                from.View,
                from.Attribute,
                relation,
                to.LayoutGuide,
                to.Attribute,
                coefficients.Multiplier,
                coefficients.Constant
                );

            var view = from.View;

            while (view?.Superview != null)
            {
                view = view.Superview;
            }

            _constraints.Add(new Constraint(view, constraint));

            return(constraint);
        }
Example #22
0
 public NSLayoutConstraint(AnyObject item, NSLayoutAttribute attribute2, NSLayoutRelation relatedBy, [Optional] AnyObject toItem, NSLayoutAttribute attribute, CGFloat multiplier, CGFloat constant)
 {
 }
Example #23
0
 /// <summary>
 /// Create a new height constraint with given parent view where the contraint should be added.
 /// Use this only if the view is not under the same parent view.
 /// </summary>
 public ParentConstraint HeightToParent(NSLayoutRelation relation, UIView target, NSLayoutAttribute attribute, float multiplier = 1f, float constant = 0f, float priority = Priority.Required)
 {
     return(AddNewConstraintToParent(View, NSLayoutAttribute.Height, relation, target, attribute, multiplier, constant, priority));
 }
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));
 }
Example #25
0
        public static bool GenerateConstraint(this UIView view1, NSLayoutAttribute attribute1, NSLayoutRelation relation, UIView view2, NSLayoutAttribute attribute2, nfloat multiplier, nfloat constant)
        {
            NSLayoutConstraint constraint = view1.Constraints.Where(c => c.FirstAttribute == attribute1).FirstOrDefault();

            if (constraint != null)
            {
                view1.RemoveConstraint(constraint);
            }
            constraint        = NSLayoutConstraint.Create(view1, attribute1, relation, view2, attribute2, multiplier, constant);
            constraint.Active = true;
            view1.AddConstraint(constraint);
            view1.UpdateConstraints();

            return(true);
        }
Example #26
0
 public static NSLayoutConstraint PinRight(NSView view, NSView superView, float padding, NSLayoutRelation relation)
 {
     return(NSLayoutConstraint.Create(view, NSLayoutAttribute.Right, relation, superView, NSLayoutAttribute.Right, 1.0f, padding));
 }
        public static NSLayoutConstraint ConstraintTo(this NSView view1, NSView view2, Expression <Func <ConstraintProxy, ConstraintProxy, bool> > expression)
        {
            var mainExpression        = expression.Body as BinaryExpression;
            NSLayoutRelation relation = NSLayoutRelation.Equal;

            switch (mainExpression.NodeType)
            {
            case ExpressionType.Equal:
                relation = NSLayoutRelation.Equal;
                break;

            case ExpressionType.LessThanOrEqual:
                relation = NSLayoutRelation.LessThanOrEqual;
                break;

            case ExpressionType.GreaterThanOrEqual:
                relation = NSLayoutRelation.GreaterThanOrEqual;
                break;

            default:
                throw new ArgumentException("Relation " + mainExpression.NodeType.ToString() + " not valid");
            }

            var propLeft  = (NSLayoutAttribute)Enum.Parse(typeof(NSLayoutAttribute), ((MemberExpression)mainExpression.Left).Member.Name);
            var propRight = propLeft;

            if (mainExpression.Right.NodeType == ExpressionType.Constant)
            {
                var c = Convert.ToSingle(((ConstantExpression)mainExpression.Right).Value);
                // Console.WriteLine ("NSLayoutConstraint.Create ({0}, NSLayoutAttribute.{1}, NSLayoutRelation.{2}, {3},  NSLayoutAttribute.{4}, {5}f, {6}f),", view1, propLeft, relation, null, propRight, 1, c);
                return(NSLayoutConstraint.Create(view1, propLeft, relation, null, NSLayoutAttribute.NoAttribute, 1, c));
            }
            else if (mainExpression.Right is MemberExpression)
            {
                propRight = (NSLayoutAttribute)Enum.Parse(typeof(NSLayoutAttribute), ((MemberExpression)mainExpression.Right).Member.Name);
                // Console.WriteLine ("NSLayoutConstraint.Create ({0}, NSLayoutAttribute.{1}, NSLayoutRelation.{2}, {3},  NSLayoutAttribute.{4}, {5}f, {6}f),", view1, propLeft, relation, view2, propRight, 1, 0);
                return(NSLayoutConstraint.Create(view1, propLeft, relation, view2, propRight, 1, 0));
            }

            var addNode = mainExpression.Right as BinaryExpression;

            var mulNode    = addNode;
            var constant   = 0f;
            var multiplier = 1f;

            if (addNode.Left.NodeType == ExpressionType.Constant)
            {
                mulNode  = addNode.Right as BinaryExpression;
                constant = Convert.ToSingle(((ConstantExpression)addNode.Left).Value);
            }
            else
            {
                mulNode  = addNode.Left as BinaryExpression;
                constant = Convert.ToSingle(((ConstantExpression)addNode.Right).Value);
            }
            constant *= addNode.NodeType == ExpressionType.Subtract ? -1 : 1;

            if (mulNode != null)
            {
                if (mulNode.Left.NodeType == ExpressionType.Constant)
                {
                    multiplier = Convert.ToSingle(((ConstantExpression)mulNode.Left).Value);
                    propRight  = (NSLayoutAttribute)Enum.Parse(typeof(NSLayoutAttribute), ((MemberExpression)mulNode.Right).Member.Name);
                }
                else
                {
                    multiplier = Convert.ToSingle(((ConstantExpression)mulNode.Right).Value);
                    propRight  = (NSLayoutAttribute)Enum.Parse(typeof(NSLayoutAttribute), ((MemberExpression)mulNode.Left).Member.Name);
                }
                if (mulNode.NodeType == ExpressionType.Divide)
                {
                    multiplier = 1.0f / multiplier;
                }
            }
            else
            {
                var member = (MemberExpression)(addNode.Right is MemberExpression ? addNode.Right : addNode.Left);
                propRight = (NSLayoutAttribute)Enum.Parse(typeof(NSLayoutAttribute), member.Member.Name);
            }

            // Console.WriteLine ("NSLayoutConstraint.Create ({0}, NSLayoutAttribute.{1}, NSLayoutRelation.{2}, {3},  NSLayoutAttribute.{4}, {5}f, {6}f),", view1, propLeft, relation, view2, propRight, multiplier, constant);

            return(NSLayoutConstraint.Create(view1, propLeft, relation, view2, propRight, multiplier, constant));
        }
Example #28
0
 public static NSLayoutConstraint [] PinBottomLeft(NSView view, NSView superView, float padding, NSLayoutRelation relation)
 {
     return(new NSLayoutConstraint []
     {
         NSLayoutConstraint.Create(view, NSLayoutAttribute.Left, relation, superView, NSLayoutAttribute.Left, 1.0f, padding),
         NSLayoutConstraint.Create(view, NSLayoutAttribute.Bottom, relation, superView, NSLayoutAttribute.Bottom, 1.0f, padding)
     });
 }
Example #29
0
 /// <summary>
 /// Create a new width constraint.
 /// </summary>
 public ParentConstraint Width(NSLayoutRelation relation, NSObject target, NSLayoutAttribute attribute, float multiplier = 1f, float constant = 0f, float priority = Priority.Required)
 {
     return(AddNewConstraint(View, NSLayoutAttribute.Width, relation, target, attribute, multiplier, constant, priority));
 }
Example #30
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);
		}
Example #31
0
		public static NSLayoutConstraint Create (NSObject view1, NSLayoutAttribute attribute1, NSLayoutRelation relation)
		{
			return NSLayoutConstraint.Create (view1, attribute1, relation, null, NSLayoutAttribute.NoAttribute, 1.0f, 0f);
		}
 // 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));
 }
Example #33
0
        public static UIView WithConstraint(this UIView constrainedView, UIView view1, NSLayoutAttribute attribute1, NSLayoutRelation relation, UIView view2, NSLayoutAttribute attribute2, nfloat multiplier, nfloat constant, [CallerMemberName] string identifier = "", float?priority = null)
        {
            if (view1 != null && view1 != constrainedView)
            {
                view1.TranslatesAutoresizingMaskIntoConstraints = false;
            }

            if (view2 != null && view2 != constrainedView)
            {
                view2.TranslatesAutoresizingMaskIntoConstraints = false;
            }

            var constraint = NSLayoutConstraint.Create(view1, attribute1, relation, view2, attribute2, multiplier, constant);

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

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

            constrainedView.AddConstraint(constraint);
            return(constrainedView);
        }