- Create element without an explicit
Frame
. - Set
TranslatesAutoresizingMaskIntroConstraints = false
- Create an array of
NSLayoutConstraints
- Work top-to-bottom, left-to-right, or vice versa. Do this consistently throughout program
- Use Layout Anchors
- Use the top-level
UIView
sSafeAreaLayoutGuide
to position relative to the Window / screen - For each dimension, set its location (
LeadingAnchor
/TopAnchor
orTrailingAnchor
/BottomAnchor
) - Either set the other location anchor or set the internal dimension (
WidthAnchor
/HeightAnchor
) - Call
NSLayoutConstraint.ActivateConstraints
after theUIView
and any referencedUIView
objects have been added to the View Hierarchy (compiles OK, but runtime exception)
toolbar = new UIToolbar();
toolbar.TranslatesAutoresizingMaskIntoConstraints = false;
var tbConstraints = new[]
{
toolbar.LeadingAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.LeadingAnchor),
toolbar.TrailingAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.TrailingAnchor),
toolbar.TopAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.TopAnchor),
toolbar.HeightAnchor.ConstraintEqualTo(toolbar.IntrinsicContentSize.Height)
};
View.AddSubview(toolbar);
NSLayoutConstraint.ActivateConstraints(tbConstraints);
label = new UILabel();
label.Text = "This is the detail view";
label.TranslatesAutoresizingMaskIntoConstraints = false;
var lblConstraints = new[]
{
label.LeadingAnchor.ConstraintEqualTo(this.View.SafeAreaLayoutGuide.LeadingAnchor, 20.0f),
label.WidthAnchor.ConstraintEqualTo(label.IntrinsicContentSize.Width),
label.TopAnchor.ConstraintEqualTo(this.toolbar.BottomAnchor, 20.0f),
label.HeightAnchor.ConstraintEqualTo(label.IntrinsicContentSize.Height)
};
View.AddSubview(label);
NSLayoutConstraint.ActivateConstraints(lblConstraints);