Created
December 27, 2018 12:45
-
-
Save dgyesbreghs/a49678562eb89bca6821a778aa2c6d77 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using CoreGraphics; | |
using UIKit; | |
namespace Kitta.Extensions | |
{ | |
public enum KtDimension { Height, Width } | |
public static class UiViewExtensions | |
{ | |
/// <summary> | |
/// Sets the view to a specific size. | |
/// </summary> | |
/// <param name="view"></param> | |
/// <param name="size"></param> | |
/// <returns></returns> | |
public static NSLayoutConstraint[] AutoSetDimension(this UIView view, CGSize size) | |
{ | |
IList<NSLayoutConstraint> constraints = new List<NSLayoutConstraint>(2); | |
constraints.Add(view.AutoSetDimension(KtDimension.Height, size.Height)); | |
constraints.Add(view.AutoSetDimension(KtDimension.Width, size.Width)); | |
return constraints.ToArray(); | |
} | |
/// <summary> | |
/// Sets the given dimension of the view to a specific size. | |
/// </summary> | |
/// <param name="view"></param> | |
/// <param name="dimension"></param> | |
/// <param name="constant"></param> | |
/// <returns></returns> | |
public static NSLayoutConstraint AutoSetDimension(this UIView view, KtDimension dimension, nfloat constant) | |
{ | |
var constraint = new NSLayoutConstraint(); | |
switch (dimension) | |
{ | |
case KtDimension.Height: | |
constraint = view.HeightAnchor.ConstraintEqualTo(constant); | |
break; | |
case KtDimension.Width: | |
constraint = view.WidthAnchor.ConstraintEqualTo(constant); | |
break; | |
} | |
constraint.Active = true; | |
return constraint; | |
} | |
/// <summary> | |
/// Matches a dimension of the view to a given dimension of another view. | |
/// </summary> | |
/// <param name="view"></param> | |
/// <param name="dimension"></param> | |
/// <param name="peerView"></param> | |
/// <returns></returns> | |
public static NSLayoutConstraint AutoSetDimension(this UIView view, KtDimension dimension, UIView peerView) | |
{ | |
return view.AutoSetDimension(dimension, peerView, 0); | |
} | |
/// <summary> | |
/// Matches a dimension of the view to a given dimension of another view with an offset. | |
/// </summary> | |
/// <param name="view"></param> | |
/// <param name="dimension"></param> | |
/// <param name="peerView"></param> | |
/// <param name="constant"></param> | |
/// <returns></returns> | |
public static NSLayoutConstraint AutoSetDimension(this UIView view, KtDimension dimension, UIView peerView, | |
nfloat constant) | |
{ | |
var constraint = new NSLayoutConstraint(); | |
switch (dimension) | |
{ | |
case KtDimension.Height: | |
constraint = view.HeightAnchor.ConstraintEqualTo(peerView.HeightAnchor, constant); | |
break; | |
case KtDimension.Width: | |
constraint = view.WidthAnchor.ConstraintEqualTo(peerView.WidthAnchor, constant); | |
break; | |
} | |
constraint.Active = true; | |
return constraint; | |
} | |
/// <summary> | |
/// Return the layoutGuide for the correct iOS Version | |
/// Before iOS 11 -> Margin Area Guide | |
/// >= iOS 11 -> Safe Area Guide | |
/// </summary> | |
/// <param name="view"></param> | |
/// <returns></returns> | |
public static UILayoutGuide LayoutGuide(this UIView view) | |
{ | |
return UIDevice.CurrentDevice.CheckSystemVersion(11, 0) | |
? view.SafeAreaLayoutGuide | |
: view.LayoutMarginsGuide; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment