在此处和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的视图'。
运行应用程序,第一个视图返回:
从FlyoutNavigation菜单中选择相同的项目,然后正确绘制。
我已经通过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我错过了'某事',或者设置不正确,我无法用手指。