Don_Mag icon

Untitled

Don_Mag | PRO | 05/04/20 04:33:41 PM UTC | 0 ⭐ | 2228 👁️ | Never ⏰ | []
C# |

4.31 KB

|

None

|

0 👍

/

0 👎

/*
First tip: Get rid of this function...
 
   internal static void Anchor(this UIView uIView, NSLayoutYAxisAnchor top = null, NSLayoutXAxisAnchor leading = null, NSLayoutYAxisAnchor bottom = null, NSLayoutXAxisAnchor trailing = null, UIEdgeInsets padding = default, CGSize size = default)
 
It only saves a few keystrokes, and causes problems if/when we need change constraints (the Constant, Priority, Activate/Deactivate, etc).
 
A better approach than adding a "Container" view and setting constraints on individual CardViews would be to use a Stack View.
 
In plain language...
 
1. Add scrollview to VC view
2. constrain all 4 sides to safe area
3. add a UIStackView to scroll view
4. constrain all 4 sides to scrollView.contentLayoutGuide (10-pts padding)
5. constrain stack view width to scrollView.frameLayoutGuide.widthAnchor -20 (10-pts on each side
6. create CardViews and add as arranged subviews of stackView
 
- on pull-to-refresh, either
 - update the content of the current CardViews
- or
 - remove each cardView from superView, and re-add new ones
 
So, if I understand the Xamarin / C# syntax correctly (there may be an error or two in here):
*/
 
public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    _scrollView = new UIScrollView
    {
        ShowsHorizontalScrollIndicator = false,
        TranslatesAutoresizingMaskIntoConstraints = false
    };
 
    if (!UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
    {
        _scrollView.AlwaysBounceVertical = true;
        _scrollView.Bounces = true;
    }
 
    _refreshControl = new UIRefreshControl { TranslatesAutoresizingMaskIntoConstraints = false };
    _refreshControl.Enabled = true;
    _refreshControl.ValueChanged -= RefreshControl_ValueChanged;
    _refreshControl.ValueChanged += RefreshControl_ValueChanged;
    if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
    {
        _scrollView.RefreshControl = _refreshControl;
    }
    else
    {
        _scrollView.AddSubview(_refreshControl);
    }
 
// 1. Add scrollview to VC view
    this.View.AddSubview(_scrollView);
 
// 2. constrain all 4 sides to safe area
    _scrollView.TopAnchor.ConstraintEqualTo(this.View.SaferAreaLayoutGuide().TopAnchor, 0f).Active = true;
    _scrollView.LeadingAnchor.ConstraintEqualTo(this.View.SaferAreaLayoutGuide().LeadingAnchor, 0f).Active = true;
    _scrollView.TrailingAnchor.ConstraintEqualTo(this.View.SaferAreaLayoutGuide().TrailingAnchor, 0f).Active = true;
    _scrollView.BottomAnchor.ConstraintEqualTo(this.View.SaferAreaLayoutGuide().BottomAnchor, 0f).Active = true;
 
// 3. add a UIStackView to scroll view
    _stackView = new UIStackView {
        TranslatesAutoresizingMaskIntoConstraints = false
        Axis = UILayoutConstraintAxis.Vertical
        Distribution = UIStackViewDistribution.Fill
        Spacing = 10f
    };
 
    _scrollView.AddSubview(_stackView);
 
// 4. constrain all 4 sides to scrollView.contentLayoutGuide (10-pts padding)
    _stackView.TopAnchor.ConstraintEqualTo(_scrollView.ContentLayoutGuide.TopAnchor, 10f).Active = true;
    _stackView.LeadingAnchor.ConstraintEqualTo(_scrollView.ContentLayoutGuide.LeadingAnchor, 10f).Active = true;
    _stackView.TrailingAnchor.ConstraintEqualTo(_scrollView.ContentLayoutGuide.TrailingAnchor, -10f).Active = true;
    _stackView.BottomAnchor.ConstraintEqualTo(_scrollView.ContentLayoutGuide.BottomAnchor, -10f).Active = true;
 
// 5. constrain stack view width to scrollView.frameLayoutGuide.widthAnchor -20 (10-pts on each side
    _stackView.WidthAnchor.ConstraintEqualTo(_scrollView.FrameLayoutGuide.WidthAnchor, -20f).Active = true;
 
    // NO Height constraint for stackView
 
// 6. create CardViews and add as arranged subviews of stackView
    CardView qolCard = new CardView();
    _stackView.AddArrangedSubview(qolCard);
    qolCard.TranslatesAutoresizingMaskIntoConstraints = false;
    qolCard.CornerRadius = 5f;
    qolCard.ShadowOffsetHeight = 0;
    qolCard.ShadowOffsetWidth = 0;
    qolCard.BackgroundColor = UIColor.White;
 
    CardView goalsCard = new CardView();
    _stackView.AddArrangedSubview(goalsCard);
    goalsCard.TranslatesAutoresizingMaskIntoConstraints = false;
    goalsCard.CornerRadius = 5f;
    goalsCard.ShadowOffsetHeight = 0;
    goalsCard.ShadowOffsetWidth = 0;
    goalsCard.BackgroundColor = UIColor.White;
 
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎