gpt4 book ai didi

ios - 如何正确绑定(bind) NSLayoutConstraint 的常量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:02:40 25 4
gpt4 key购买 nike

我正在使用 Xamarin 和 MVVMCross 开发应用程序,但在创建绑定(bind) NSLayoutConstraints 常量时遇到问题。

我有一个带有 subview 的 View ,如果某个 List<> 没有元素,它应该“消失”,下面的内容应该向上移动而不是留空。

为此,我向该 View 添加了一个 NSLayoutConstraint 以便能够以编程方式修改它的高度,并使用以下代码行将其绑定(bind):

var set = this.CreateBindingSet<ActivityView, ActivityViewModel> ();
set.Bind (ConstraintHeightPictures).To (vm => vm.Activity.ImageList.Count).For (cons => cons.Constant).WithConversion ("CountToConstraintHeight", Constants.HeightActivityImages);
set.Apply ();

CountToConstraintHeightConverter 非常简单,它只是检查值是否等于 0 以返回 0 或默认高度值 (Constants.HeightActivityImages)。

代码没有给出执行错误并通过转换器,但是当我运行应用程序时, View 仍然存在,是空的。

另一方面,如果我在 ViewWillLayoutSubviews 中运行以下代码行,它可以完美运行,但未绑定(bind)。

ConstraintHeightPictures.Constant = ViewModel.Activity.ImageList.Count > 0 ? Constants.HeightActivityImages : 0.0f;

有什么想法吗?

非常感谢!

霍尔迪

最佳答案

我认为问题在于 iOS 需要您在设置常量后调用 LayoutIfNeeded(或类似的)。

例如为了动画约束常量变化,见Are NSLayoutConstraints animatable?

对于绑定(bind),您可能可以使用 View 上的属性来执行此操作,例如:

public float PicHeight
{
get { return ConstraintHeightPictures.Constant; }
set {
ConstraintHeightPictures.Constant = value;
_pictureView.SetNeedsUpdateConstraints();
UIView.Animate(0.25f, () => {
_pictureView.LayoutIfNeeded();
}
}
}

这可以绑定(bind)为:

set.Bind (this).To (vm => vm.Activity.ImageList.Count).For (v => v.PicHeight).WithConversion ("CountToConstraintHeight", Constants.HeightActivityImages);

我认为这应该可行...(如果您不想要动画,那么应该很容易将其删除)

或者...您也可以构建一个知道如何进行此更改的自定义绑定(bind)(尽管它可能有点复杂,因为它需要同时访问 subview 和约束)

关于ios - 如何正确绑定(bind) NSLayoutConstraint 的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com