AutoLayout iOS avec Xamarin utilisant le code C # UNIQUEMENT dans Visual Studio 2013, sans XCode ou Interface Builder
J'ai commencé à utiliser Xamarin parce que je voulais rester dans Visual Studio 2013 de l'environnement et ne pas avoir à apprendre un nouvel environnement. De toute façon, je vais coller mon code du contrôleur ci-dessous et nous espérons que quelqu'un est plus intelligent que moi (une quasi certitude) et peut me ramener sur la bonne voie.
Je viens de découvrir mise en page automatique. Il me semble que la mise en page automatique de la compréhension est essentielle pour accélérer le développement. Cependant, je n'ai pas trouver beaucoup d'informations pour l'utilisation de mise en page automatique avec pure C# dans Visual Studio 2013. Peut-être que je suis juste de ne pas regarder dans les bons endroits.
De toute façon, nous allons commencer cette nouvelle discussion avec un simple contrôleur qui utilise la mise en page automatique TOTALEMENT en C# sans l'aide de tous .plume ou Interface Builder choses à tous. Et sans l'aide de Xamarin Studio. Juste TOUT fait dans Visual Studio 2013.
Voici les conditions:
- Faire un UIViewController qui faciliteront la mise en œuvre de l'iAD d'apple.
- Fondamentalement, nous voulons placer un sai bannière au bas de l'écran, en prenant toute la largeur.
- Nous allons mettre la vue au-dessus de la sai bannière et remplir le reste de l'écran.
- La bannière de vue peut-être disparaître de temps à autre si pas d'Annonces sont présents, nous avons donc besoin de gérer cela.
- Nous avons besoin pour gérer lorsque l'appareil tourne à accueillir une nouvelle orientation.
- Nous avons besoin pour gérer les différents appareils. iPod, iPad, iPhone, la version 4 et 5
Cela devrait être trivial, mais j'ai été frapper ma tête sur le clavier pendant 2 jours à essayer d'obtenir que cela fonctionne. Des recommandations, des exemples ou des idées serait GRANDEMENT UTILE. Rappelez-vous, nous voulons SEULEMENT utiliser le C# dans Visual Studio et de ne pas utiliser Interface Builder. Voici ma tentative de travail:
À l'aide du code ci-dessous, je me retrouve avec le AdBanner hors de l'écran en dessous de la InternalView. Aussi, la Vue Interne est plus long que l'écran et que la moitié de la largeur de l'écran. Ce qui se passe ici? Ai-je besoin pour activer la Fonctionnalité mise en page automatique quelque part? Puis-je le faire dans le code C# ou est-il cacher quelque part dans les Paramètres de Projet?
using System;
using MonoTouch.iAd;
using MonoTouch.UIKit;
namespace ADayBDayiOS
{
public class ADViewController : UIViewController
{
private UIView InternalView { get; set; }
private ADBannerView AdView { get; set; }
public override void ViewDidLoad()
{
base.ViewDidLoad();
InternalView = new UIView{BackgroundColor=UIColor.Blue};
//This is apple's standard ADBannerView
AdView = new ADBannerView(ADAdType.Banner) {Hidden = true};
AdView.FailedToReceiveAd += HandleFailedToReceiveAd;
AdView.AdLoaded += HandleAdLoaded;
View.BackgroundColor = UIColor.Clear;
//I'm pretty sure that we need these three lines
View.TranslatesAutoresizingMaskIntoConstraints = false;
InternalView.TranslatesAutoresizingMaskIntoConstraints = false;
AdView.TranslatesAutoresizingMaskIntoConstraints = false;
View.AddSubview(InternalView);
View.AddSubview(AdView);
Resize();
}
public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation)
{
base.DidRotate(fromInterfaceOrientation);
Resize();
}
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
Resize();
}
private void Resize()
{
//Remove all constraints, and reset them...
View.RemoveConstraints(View.Constraints);
if (AdView == null || AdView.Hidden)
{//Fill up the entire screen with our InternalView
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Width, NSLayoutRelation.Equal, View, NSLayoutAttribute.Width, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, 0));
}
else
{//Put banner ad at the bottom of the screen and fill the rest of the screen with our InternalView
View.AddConstraint(NSLayoutConstraint.Create(AdView, NSLayoutAttribute.Width, NSLayoutRelation.Equal, View, NSLayoutAttribute.Width, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Width, NSLayoutRelation.Equal, View, NSLayoutAttribute.Width, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(AdView, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, 0));
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, AdView.Bounds.Height));
View.AddConstraint(NSLayoutConstraint.Create(InternalView, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, 0));
}
}
///<summary>
///Shows the AdView when a new Ad loads
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
void HandleAdLoaded(object sender, EventArgs e)
{
if (AdView == null)
return;
AdView.Hidden = false;
Resize();
}
///<summary>
///Hides the AdView when no ads are available
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
void HandleFailedToReceiveAd(object sender, AdErrorEventArgs e)
{
if (AdView == null)
return;
AdView.Hidden = true;
Resize();
}
}
}
source d'informationauteur Curtis
Vous devez vous connecter pour publier un commentaire.
La création de Contraintes dans le code de mise en page automatique manuellement à l'aide d'exposés iOS méthodes est un fastidieux processus.
Mise en page automatique a beaucoup d'avantages et de l'utiliser pour réaliser des choses comme les changements d'orientation et la configuration générale est un peu un no-brainer. Pour obtenir ce dont vous avez besoin avec juste VS2013, je vous suggère de jeter un oeil sur
FluentLayouts
Elle est faite par l'auteur qui a créé MVVMCross et il a très peu de documentation pour vous aider à démarrer.
Post De Blog
Vid Youtube Tutoriel
Essentiellement avec elle, vous pouvez écrire des contraintes comme:
Donc pour votre cas,
vous auriez pro voulez avoir l'annonce de la bannière de vue épinglé en Haut de la superview avec des épingles à gauche et à droite de la superview. Pro ajouter une hauteur fixe si vous en avez besoin. L'épinglage à gauche et à droite de la superview va alors répondre lorsque l'appareil changements d'orientation et de l'échelle de la largeur en conséquence. Top position d'être pris en charge avec la charnière supérieure et la hauteur fixe pour la hauteur de la bannière.
Mise en page automatique par lui-même vous demande pour la position X,Y de l'élément et l'élément à la taille désirée. Certaines commandes, comme les boutons ont l'implicite de taille de sorte que vous n'avez pas besoin de définir cette largeur/hauteur explicitement. Toutefois, les choses comme une plaine
UIView
ne le fait pas. Donc, vous devez spécifier leur taille avec les contraintes trop.Enfin d'avoir un outil comme FluentLayouts nous permet de créer des contraintes beaucoup plus facilemais les principes fondamentaux de ce que les mises en page automatiques est et comment l'utiliser, c'est juste des connaissances générales sur le sujet que vous pourriez être effectivement mieux de la visite d'apple docs ou des tutoriels comme ces. Oui, il le montre dans XCode, mais il explique aussi le sujet que nous avons besoin de comprendre, peu importe. Ce site a aussi des articles sur les contraintes de code qui explique les tenants et aboutissants sur les constantes et les multiplicateurs et de toutes sortes avec les contraintes qui sont la peine de lire. Une fois que vous comprenez les concepts et ce que vous pouvez faire avec elle, puis choisissez un outil comme fluide-mises en page et de vos exigences devraient tomber en place.
Frank Krueger a une solution élégante à ce problème dont vous pouvez lire ici: http://praeclarum.org/post/45690317491/easy-layout-a-dsl-for-nslayoutconstraint. Le code est disponible ici: https://gist.github.com/praeclarum/5175100
Il suffit d'ajouter la classe à votre projet iOS et vous pouvez écrire le code comme ceci:
J'ai trouvé que la suite fonctionne plutôt bien pour un simple contrôleur de l'affichage d'une sai AdBannerView avec une vue normale. Le code ci-dessous appelle aussi le "Redimensionner" la méthode pour tous les sous-vues qui sont de type "AdView'