3

ここと github ( https://github.com/Clancey/FlyoutNavigation/issues/29 ) に相互投稿。

追跡しようとしている奇妙な動作があり、それが FlyoutNavigation なのか、それとも私がやっていることなのかわかりません。たぶん、私よりも物事を少しよく理解している誰かが簡単に見ることができます.

サンプル プロジェクト - https://github.com/benhysell/FlyoutNavigationWithNSLayoutConstraintsError

目標 -このブログ投稿http://praeclarum.org/post/45690317491/easy-layout-a-dsl-forで説明されている、NSLayoutConstraints の AC# 構文であるhttps://gist.github.com/praeclarum/5175100を使用します。 -nslayoutconstraint、FlyoutNavigation を使用。

問題 - NSLayoutConstraints を組み込んだビューを最初に使用すると、ビューは制約または背景色を尊重しません。どちらも奇妙です。FlyoutNavigation のメニューからのビューの後続の「選択」で、ビューは適切に描画されます。

セットアップ - iPhone Simulator 6.1 および最新リリースの Xcode に対して Xamarin Beta Channel で作業します。

再現手順 1. これを表示する最も簡単な方法は、FlytoutNavigation に付属のサンプル プロジェクトを開き、以下の手順を使用してこのプロジェクトを変更することです。この投稿には、エラーを表示するために修正したサンプル プロジェクトへのリンクを含めました。

gist https://gist.github.com/praeclarum/5175100を新しいクラスに追加し、それをレイアウトと呼びます。

新しい UIViewController と以下を ViewDidLoad() に追加します。これは、VS2012 で作成できる Xamarin の「Hello World」サンプル アプリから変更されたことに注意してください。

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    View.Frame = UIScreen.MainScreen.Bounds;
    View.BackgroundColor = UIColor.Red;
    button = UIButton.FromType(UIButtonType.RoundedRect);

    button.SetTitle("Click me", UIControlState.Normal);

    button.TouchUpInside += (object sender, EventArgs e) =>
    {
        button.SetTitle(String.Format("clicked {0} times", numClicks++), UIControlState.Normal);
    };

    View.AddSubview(button);
    const int ButtonWidth = 75;
    const int HPadding = 22;
    const int VPadding = 44;
    View.ConstrainLayout(() =>
                          button.Frame.Width == ButtonWidth &&
        button.Frame.Left == View.Frame.Left + HPadding &&
        button.Frame.Top == View.Frame.Top + VPadding);
}

MainController.cs で置き換えます

navigation.ViewControllers = Array.ConvertAll (Tasks, title =>
    new UINavigationController (new TaskPageController (navigation, title))
);

navigation.ViewControllers = Array.ConvertAll(Tasks, title =>
    new UINavigationController(new MyViewController(navigation))
);

私は「すべてのビューを NSLayoutConstraints を実装するビューにする」と言っています。

アプリケーションを実行すると、最初のビューが次のように返されます。

ここに画像の説明を入力

FlyoutNavigation メニューから同じ項目を選択すると、適切に描画されます。

ここに画像の説明を入力

FlyoutNavigationController.cs を数回トレースしましたが、FlyoutNavigation から項目を選択する 2 回目の 238 行目に表示されます。

this.View.AddSubview (mainView);

ViewControllers[0].ChildViewControllers[0].View.Frame {{X=160,Y=208,Width=0,Height=0}} System.Drawing.RectangleF

これはビューのサイズが正しくありませんが、238 行目に移動した後は次のようになります。

ViewControllers[0].ChildViewControllers[0].View.Frame {{X=0,Y=0,Width=320,Height=416}} System.Drawing.RectangleF

位置が固定され、ビューが正しく描画されます。

概要 - 問題なく単一ページ ウィンドウ アプリケーションで NSLayoutConstraints を使用して Gist を使用してみましたが、FlyoutNavigation の 2 回目の呼び出し後に最終的に適切に描画されるため、「何か」があると考えています。 FlyoutNavigation が見つからないか、正しく設定されていないため、指を置くことができません。

4

0 に答える 0