Uiview 弹出导航-使用NSLayoutConstraints的视图在首次使用时无法正确绘制视图

Uiview 弹出导航-使用NSLayoutConstraints的视图在首次使用时无法正确绘制视图,uiview,xamarin.ios,xamarin,nslayoutconstraint,Uiview,Xamarin.ios,Xamarin,Nslayoutconstraint,交叉张贴在此处和github上 我有一个奇怪的行为,我试图追踪,我不知道这是飞出导航或其他我正在做的事情。也许有人可以快速看一看,他比我更了解事情 示例项目- Goal-Use是NSLayoutConstraints的一种C语法,如本文所述,带有弹出式导航 问题-首次使用包含NSLayoutConstraints的视图时,视图不考虑约束或背景颜色,两者都是奇数。从弹出式导航菜单中选择视图后,视图将正确绘制 安装-在Xamarin Beta频道中使用iPhone模拟器6.1和最新发布的Xcode

交叉张贴在此处和github上

我有一个奇怪的行为,我试图追踪,我不知道这是飞出导航或其他我正在做的事情。也许有人可以快速看一看,他比我更了解事情

示例项目-

Goal-Use是NSLayoutConstraints的一种C语法,如本文所述,带有弹出式导航

问题-首次使用包含NSLayoutConstraints的视图时,视图不考虑约束或背景颜色,两者都是奇数。从弹出式导航菜单中选择视图后,视图将正确绘制

安装-在Xamarin Beta频道中使用iPhone模拟器6.1和最新发布的Xcode

复制步骤 1.显示这一点的最简单方法是打开FlytoutNavigation附带的示例项目,并使用以下步骤修改此项目。我在这篇文章中添加了一个链接,指向我修改的示例项目,以显示错误

将要点添加到一个新类中,称之为布局

在ViewDidLoad中添加一个新的UIViewController和以下内容,注意这是从可以在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))
);

我是说“让每个视图都成为实现NSLayoutConstraints的视图”

运行应用程序时,第一个视图返回:

从弹出式导航菜单中选择相同的项目,然后它将正确绘制

我在FlyoutNavigationController.cs中浏览了几次,第二次从FlyoutNavigation中选择项目时,它出现在第238行:

this.View.AddSubview (mainView);

ViewControllers[0].ChildViewControllers[0].View.Frame {{X=160,Y=208,Width=0,Height=0}} System.Drawing.RectangleF
ViewControllers[0].ChildViewControllers[0].View.Frame {{X=0,Y=0,Width=320,Height=416}} System.Drawing.RectangleF
这是视图的不正确大小,但是在我跨过第238行之后:

this.View.AddSubview (mainView);

ViewControllers[0].ChildViewControllers[0].View.Frame {{X=160,Y=208,Width=0,Height=0}} System.Drawing.RectangleF
ViewControllers[0].ChildViewControllers[0].View.Frame {{X=0,Y=0,Width=320,Height=416}} System.Drawing.RectangleF
位置已固定,视图将正确绘制

小结-我曾尝试在单页窗口应用程序中单独使用gist和NSLayoutConstraints,但没有问题,我想,因为在第二次调用FlyoutNavigation后,它最终会正确绘制,所以我认为FlyoutNavigation缺少一个“东西”,或者设置不正确,我无法将手指放在上面