FlyoutNavigation - 使用NSLayoutConstraints的视图无法在首次使用时正确绘制视图

时间:2013-07-22 18:09:36

标签: uiview xamarin.ios xamarin nslayoutconstraint

在此处和github上交叉发布,https://github.com/Clancey/FlyoutNavigation/issues/29

我有一个奇怪的行为,我正试图追踪,我不确定它是FlyoutNavigation还是我正在做的其他事情。也许有人可以快速了解谁比我更了解事情。

示例项目 - https://github.com/benhysell/FlyoutNavigationWithNSLayoutConstraintsError

目标 - 使用https://gist.github.com/praeclarum/5175100,NSLayoutConstraints的C#语法,在此博客文章http://praeclarum.org/post/45690317491/easy-layout-a-dsl-for-nslayoutconstraint中描述,使用FlyoutNavigation。

问题 - 在第一次使用包含NSLayoutConstraints的视图时,视图不考虑约束或背景颜色,两者都是奇数。在FlyoutNavigation菜单的后续“选择”视图中,视图将正确绘制。

设置 - 在针对iPhone模拟器6.1的Xamarin Beta频道和最新发布的Xcode中工作。

重现步骤 1.最简单的方法是打开FlytoutNavigation附带的示例项目,并使用以下步骤修改此项目。我在这篇文章中包含了我修改的示例项目的链接,以显示错误。

将要点https://gist.github.com/praeclarum/5175100添加到新类中,将其称为布局。

向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))
);

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

我说'让每个视图都成为实现NSLayoutConstraints的视图'。

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

enter image description here

从FlyoutNavigation菜单中选择相同的项目,然后正确绘制。

enter image description here

我已经通过FlyoutNavigationController.cs进行了几次跟踪,它第二次出现在第238行从FlyoutNavigation中选择项目:

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的第二次调用后最终会正确绘制我认为有一个FlyoutNavigation我错过了'某事',或者设置不正确,我无法用手指。

0 个答案:

没有答案