旋转屏幕时的约束

时间:2019-12-03 02:06:47

标签: c# ios xamarin xamarin.ios

我的配置受到限制,我可以看到字段,但是当我旋转屏幕时,所有内容都丢失了,我什么也看不到

public override void ViewDidLoad()
    {

        field1.Frame = new CoreGraphics.CGRect(10, 10, 100, 20);
        field2.Frame = new CoreGraphics.CGRect(10, 50, 100, 20);
        field1.TranslatesAutoresizingMaskIntoConstraints = false;  
        field2.TranslatesAutoresizingMaskIntoConstraints = false; 

    View.AddConstraints(new[] {
            NSLayoutConstraint.Create(field1, NSLayoutAttribute.Width, NSLayoutRelation.Equal, View, NSLayoutAttribute.Width, 1, -200),
            NSLayoutConstraint.Create(field1, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 40),
            NSLayoutConstraint.Create(field1, NSLayoutAttribute.Top , NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, View.Bounds.Size.Height/2),
            NSLayoutConstraint.Create(field1, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1, 0)
        });

        View.AddConstraints(new[] {
            NSLayoutConstraint.Create(field2, NSLayoutAttribute.Width, NSLayoutRelation.Equal, field1, NSLayoutAttribute.Width, 1, 0),
            NSLayoutConstraint.Create(field2, NSLayoutAttribute.Height, NSLayoutRelation.Equal, field1, NSLayoutAttribute.Height, 1, 0),
            NSLayoutConstraint.Create(field2, NSLayoutAttribute.Top, NSLayoutRelation.Equal, field1, NSLayoutAttribute.Bottom, 1, 10),
            NSLayoutConstraint.Create(field2, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1, 0)
        });
}

但是当我旋转手机屏幕时,此配置不起作用,我看不到文本字段,如何解决此错误?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

该问题是由以下原因引起的:

NSLayoutConstraint.Create(field1, NSLayoutAttribute.Top , NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, View.Bounds.Size.Height/2),

一旦设置了View.Bounds.Size.Height/2,它就是一个常量,并且在旋转屏幕后不会更新。

最简便的解决方案是将其更改为:

NSLayoutConstraint.Create(field1, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterY, 1, -20),

或者您可以在旋转后更新约束。