当前位置: 首页 > 知识库问答 >
问题:

如何正确绑定NSLayoutConstraint的常量?

微生弘
2023-03-14

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

我有一个带有子视图的视图,如果某个列表

为此,我向该视图添加了一个NSLayoutConstraint,以便能够以编程方式修改其高度,并使用以下代码行对其进行绑定:

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或默认高度值(常量.HeightActivityImages)。

代码不会给出执行错误并通过转换器,但当我运行应用程序时,视图仍然存在,为空。

另一方面,如果我在视图willlayoutsubviews中运行以下代码行,它工作得很好,但没有绑定。

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

有什么想法吗?

非常感谢!

乔迪

共有1个答案

金阳华
2023-03-14

我认为问题是iOS需要你在设置常量后调用LayoutIfNeed(或类似的)。

e、 g.要设置约束常量更改的动画,请参见NSLayoutConstraints是否可设置动画?

对于绑定,您可能可以使用视图上的属性执行此操作,例如:

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

然后可以将其绑定为:

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

我想这应该行得通。。。(如果你不想要动画,那么应该很容易去掉它)

或者。。。您可能还能够构建一个自定义绑定,该绑定将知道如何进行此更改(尽管由于它需要访问子视图和约束,所以可能有点复杂)

 类似资料:
  • 我正在用vue创建一个电影数据库应用程序,并试图输出一个从API获取的图像源。由于某些原因,src的输出没有在应用程序中呈现出应有的效果。它打印字符串{{movie.Poster}。我显然没有以正确的方式使用v-bind。那么,关于如何以正确的方式打印海报路径,有什么想法吗?

  • 问题内容: 当你只想执行但不处理异常时,如何在Python中进行呢? 以下是正确的方法吗? 问题答案: 要么 所不同的是,第一个也将赶上KeyboardInterrupt,SystemExit和类似的东西,这是直接来源于,没有

  • 解释为什么这不是一个重复:我的代码已经在工作了,我已经作为一个注释包括在内。问题是,当我将它包含到click handler函数中时,上下文为什么会发生变化。 我正在尝试在React中创建一个计算器项目。目标是将onclick处理程序附加到数字按钮,以便在计算器显示区域显示数字。但是,如果直接将处理程序写入render方法,则该处理程序正在工作,如果尝试使用ComponentDidMount,则会

  • 我尝试使用两个matInput字段,每个字段都绑定到单独的mat-autocomplete面板。按照这里的步骤,我可以让一个工作正常,但我有困难与两个输入字段和自动完成面板。 有人看到这个或者知道我做错了什么吗?

  • 百度首页的“百度一下”按钮是怎么绑定的点击(click)事件的? 其中一种是使用<form>标签,这种会刷新整个页面。 我想知道的是第二种。在点击“百度一下”按钮后,会进行异步刷新,代码会进入到jquery中,但是我没有找到到底是怎么实现监听的?然后这种实现绑定,的流程也不怎么懂 jquery中的这段代码 是怎么绑定到按钮上的?或者有大佬可以告知绑定的位置。百度这个是进行测试,最想知道的是有没有办

  • 我有一些代码,其中多个方法使用键盘,并在主方法中连续调用。我正在做的练习特别要求使用4种不同的方法,所以我不能把它们放在一起。最初,我用键盘。在每个方法的末尾关闭(),但当第二个方法运行时,无论调用顺序如何,这都会导致NoTouchElementException。通过卸下键盘。close(),代码现在可以工作了,但是我现在收到了资源泄漏的警告,因为键盘没有关闭。有人能告诉我一种关闭输入而不出错的