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