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:

  1. Faire un UIViewController qui faciliteront la mise en œuvre de l'iAD d'apple.
  2. Fondamentalement, nous voulons placer un sai bannière au bas de l'écran, en prenant toute la largeur.
  3. Nous allons mettre la vue au-dessus de la sai bannière et remplir le reste de l'écran.
  4. 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.
  5. Nous avons besoin pour gérer lorsque l'appareil tourne à accueillir une nouvelle orientation.
  6. 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