Xamarin.iOS
Auto układ w Xamarin.iOS
Szukaj…
Dodawanie ograniczeń za pomocą kotwic układu w systemie iOS 9+
// Since the anchor system simply returns constraints, you still need to add them somewhere.
View.AddConstraints(
new[] {
someLabel.TopAnchor.ConstraintEqualTo(TopLayoutGuide.GetBottomAnchor()),
anotherLabel.TopAnchor.ConstraintEqualTo(someLabel.BottomAnchor, 6),
oneMoreLabel.TopAnchor.ConstraintEqualTo(anotherLabel.BottomAnchor, 6),
oneMoreLabel.BottomAnchor.ConstraintGreaterThanOrEqualTo(BottomLayoutGuide.GetTopAnchor(), -10),
}
);
Dodawanie ograniczeń za pomocą Visual Format Language (VFL)
// Using Visual Format Language requires a special look-up dictionary of names<->views.
var views = new NSDictionary(
nameof(someLabel), someLabel,
nameof(anotherLabel), anotherLabel,
nameof(oneMoreLabel), oneMoreLabel
);
// It can also take a look-up dictionary for metrics (such as size values).
// Since we are hard-coding those values in this example, we can give it a `null` or empty dictionary.
var metrics = (NSDictionary)null;
// Add the vertical constraints to stack everything together.
// `V:` = vertical
// `|…|` = constrain to super view (`View` for this example)
// `-10-` = connection with a gap of 10 pixels (could also be a named parameter from the metrics dictionary)
// `-[viewName]-` = connection with a control by name looked up in views dictionary (using C# 6 `nameof` for refactoring support)
var verticalConstraints = NSLayoutConstraint.FromVisualFormat(
$"V:|-20-[{nameof(someLabel)}]-6-[{nameof(anotherLabel)}]-6-[{nameof(oneMoreLabel)}]->=10-|",
NSLayoutFormatOptions.AlignAllCenterX,
metrics,
views
);
View.AddConstraints(verticalConstraints);
Niektóre typy ograniczeń, takie jak proporcje obrazu , mogą nie być przekazywane w składni języka VFL (Visual Format Language) i muszą wywoływać odpowiednie metody bezpośrednio.
Korzystanie z Cirrious.FluentLayout
Korzystanie z NuGet
Install-Package Cirrious.FluentLayout
Rozbudowany przykład oparty na przykładzie początkowym na stronie GitHub , proste imię, etykiety nazwisk i pola, wszystkie ułożone jeden na drugim:
public override void ViewDidLoad()
{
//create our labels and fields
var firstNameLabel = new UILabel();
var lastNameLabel = new UILabel();
var firstNameField = new UITextField();
var lastNameField = new UITextField();
//add them to the View
View.AddSubviews(firstNameLabel, lastNameLabel, firstNameField, lastNameField);
//create constants that we can tweak if we do not like the final layout
const int vSmallMargin = 5;
const int vMargin = 20;
const int hMargin = 10;
//add our constraints
View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
View.AddConstraints(
firstNameLabel.WithSameTop(View).Plus(vMargin),
firstNameLabel.AtLeftOf(View).Plus(hMargin),
firstNameLabel.WithSameWidthOf(View),
firstNameField.WithSameWidth(firstNameLabel),
firstNameField.WithSameLeft(firstNameLabel),
firstNameField.Below(firstNameLabel).Plus(vSmallMargin),
lastNameLabel.Below(firstNameField).Plus(vMargin),
lastNameLabel.WithSameLeft(firstNameField),
lastNameLabel.WithSameWidth(firstNameField),
lastNameField.Below(lastNameLabel).Plus(vSmallMargin),
lastNameField.WithSameWidth(lastNameLabel),
lastNameField.WithSameLeft(lastNameLabel));
}
Dodawanie ograniczeń w murze
Kamieniarstwo jest biblioteką dla celu-c, ale xamarin utworzył dla niego powiązanie i stworzył go jako pakiet nuget https://www.nuget.org/packages/Masonry/ .
Instalacja Nuget
Install-Package Masonry
Spowoduje to wyśrodkowanie przycisku 100 punktów poniżej punktu środkowego zawierającego widok i ustawienie szerokości od 200 do 400 punktów
this.loginBtn.MakeConstraints(make =>
{
make.Width.GreaterThanOrEqualTo(new NSNumber(200));
make.Width.LessThanOrEqualTo(new NSNumber(400));
make.Center.EqualTo(this.View).CenterOffset(new CGPoint(0, 100));
});
To ustawia przeskalowany obraz 100 punktów powyżej punktu środkowego zawierającego widok, a następnie ustawia szerokość na szerokość zawierającego widok z mnonikiem 0,5, co oznacza 50% szerokości. Następnie ustawia wysokość do szerokości pomnożonej przez współczynnik proporcji, co powoduje skalowanie obrazu, ale utrzymuje prawidłowe proporcje
this.logo.MakeConstraints(make =>
{
make.Center.EqualTo(this.View).CenterOffset(new CGPoint(0, -100));
make.Width.EqualTo(this.View).MultipliedBy(0.5f);
make.Height.EqualTo(this.logo.Width()).MultipliedBy(0.71f);
});