iOS UIStackView 约束动画隐藏

标签 ios xamarin uiscrollview

我有一个 UIStackView (stack1),它包含两个排列的 View :一个 UIStackView (stack2) 和一个 UIScrollView (scroll)

stack2 有固定的高度,它和 scroll 都有固定的宽度。 滚动 将占用剩余空间。

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

出于某种原因,第一个动画效果很好,但是当 stack2 应该重新出现时,它出现在 scroll 后面,它仍然占据了整个空间。这是为什么?我还收到一些“无法同时满足约束条件”的警告。

这是它们的创建方式(顺便说一句,这是 xamarin,但我认为这不重要)

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

最佳答案

一方面,您为scroll设置了固定的宽度和高度(等于view.frame)。另一方面,scroll 的大小由 stack1 决定(基于它的对齐方式、间距、分布属性和 scroll 的位置code> 在 arrangedSubviews 数组中)

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

尝试去掉这串代码:scroll.HeightAnchor.ConstraintEqualTo(frame.Height), 它应该可以工作。

关于iOS UIStackView 约束动画隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948379/

相关文章:

c# - 如何将最小起订量与 Xamarin.Forms DependencyService 结合使用

Android 在应用程序被杀死时重新安排 alarmmanager 警报

ios - 滚动 UIScrollView - 阻塞主线程

ios - UIScrollView 当 contentOffset 不在原点时,不会触发附加到 subview 的 UIGestureRecognizers

windows-store-apps - Windows App 项目不支持应用程序

ios - UIScrollView 从中心到左右分页

ios - SceneKit:将创作软件中的 3D 角色导入场景?

objective-c - iOS dispatch_async,在 iOS 4 上崩溃

ios - 使用 ECSlidingViewController 更改为新的 Storyboard

ios - 在模型中快速使用内部类是一种好习惯吗?