Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UISTK视图约束动画隐藏_Ios_Xamarin_Uiscrollview - Fatal编程技术网

iOS UISTK视图约束动画隐藏

iOS UISTK视图约束动画隐藏,ios,xamarin,uiscrollview,Ios,Xamarin,Uiscrollview,我有一个UIStackView(stack1)包含两个排列视图:一个UIStackView(stack2)和一个UIScrollView(滚动) stack2具有固定高度,它和滚动条都具有固定宽度滚动将占用剩余空间 按下按钮,stack2将被隐藏,导致scroll展开并“上移”,使用相同的按钮,stack2将重新出现,并且“scroll”将返回原始大小 出于某种原因,第一个动画可以正常工作,但当stack2应该重新出现时,它会出现在scroll后面,仍然占据整个空间。为什么呢?我还收到一些“无法

我有一个
UIStackView(stack1)
包含两个排列视图:一个
UIStackView(stack2)
和一个
UIScrollView(滚动)

stack2
具有固定高度,它和
滚动条都具有固定宽度<代码>滚动
将占用剩余空间

按下按钮,
stack2
将被隐藏,导致
scroll
展开并“上移”,使用相同的按钮,
stack2
将重新出现,并且“scroll”将返回原始大小

出于某种原因,第一个动画可以正常工作,但当
stack2
应该重新出现时,它会出现在
scroll
后面,仍然占据整个空间。为什么呢?我还收到一些“无法同时满足约束”的警告

以下是它们是如何创建的(顺便说一句,这里是xamarin,但我认为这并不重要)


一方面,您可以为
滚动条设置固定的宽度和高度(与
视图.frame
)。另一方面,
卷轴
的大小由
堆栈1
决定(基于它的对齐、间距、分布属性以及
卷轴
在arrangedSubviews数组中的位置)

因此,这些约束相互矛盾。隐藏
stack2
时,矛盾会暂时消失,但当
stack2
返回视图时,矛盾会再次出现。 在这种情况下,系统必须忽略一些相互矛盾的约束(从优先级较低的约束开始),因此决定删除
stack1
排列,以满足
滚动条的高度和宽度约束

尝试删除此代码字符串:
scroll.HeightAnchor.ConstraintEqualTo(frame.Height),

它应该可以工作。

当我删除它时,我会有一种奇怪的行为
stack1
现在只显示
stack2
居中,
滚动
。当我切换按钮时,会出现
滚动
,占据整个空间并正确隐藏
stack2
,但随后我取消隐藏
stack2
滚动
再次滑出视图,而
stack2
又回到了中心位置。我还将
按比例填充
更改为
填充
,效果良好:)谢谢!我很高兴我的回答至少让你想到了解决办法:)
var stack1 = new UIStackView(View.Frame);
stack1.Axis = UILayoutConstraintAxis.Vertical;
stack1.Alignment = UIStackViewAlignment.Center;
stack1.Distribution = UIStackViewDistribution.FillProportionally;
stack1.Spacing = 0;

var scroll = new UIScrollView(frame);
var stack2 = new UIStackView();
stack2.Axis = UILayoutConstraintAxis.Horizontal;
stack2.Alignment = UIStackViewAlignment.Center;
stack2.Distribution = UIStackViewDistribution.EqualCentering;
stack2.Spacing = 20;

... adding things in stack2 ...

scroll.TranslatesAutoresizingMaskIntoConstraints = false;
stack2.TranslatesAutoresizingMaskIntoConstraints = false;

NSLayoutConstraint.ActivateConstraints(new []{
    stack2.HeightAnchor.ConstraintEqualTo(200),
    scroll.HeightAnchor.ConstraintEqualTo(frame.Height),
    scroll.WidthAnchor.ConstraintEqualTo(frame.Width)
});

stack1.AddArrangedSubview(stack2);
stack1.AddArrangedSubview(scroll);
View.AddSubview(stack1);